【问题标题】:Ruby On Rails 4 - Issue with RoutesRuby On Rails 4 - 路由问题
【发布时间】:2025-12-09 15:05:01
【问题描述】:

我是 RoR 的新手,过去几天一直在努力设置我的环境(运行 Mountain Lion)。当我看到this lesson 时,我终于达到了可以开发并决定在 lynda.com 上开始试用的地步。

到目前为止,学习 Rails 的原理和理论非常棒,但它是在 2010 年制作的,我发现 Rails 的主要版本之间有多少变化。例如,生成的 项目不再包含脚本文件夹 - 这些只是使用 Mac 命令行中的 rails 命令调用。

上一课,导师生成了一个新的rails项目,添加了一个控制器:

class SayController < ApplicationController

  def hello
  end

end

并添加了一个视图(视图 -> 说 -> ['hello.rhtml'])

<html>
    <head>
        <title>Hello World</title>
    </head>
    <body>
        <p>Hello World</p>
    </body>
</html>

就是这样。接下来,他刚刚启动了 rails 服务器,跳转到 Firefox,并输入了地址[http://localhost:3000/say/hello]。浏览器如您所愿显示文本“Hello World”。

但是,我得到“没有路线匹配 [GET] '/say/hello'”。我知道这是路线的问题,我只是找不到一个好的(和 RoR 4 特定的)用法解释。

在指导者项目中,默认情况下似乎使一切都能正常工作的行是:

map.connect ':controller/:action/:id'

我尝试添加它(我的 routes.rb 是在所有注释掉的情况下生成的),但它不起作用,我认为 RoR 4 约定不同。

那么 RoR 4 有默认路由吗? v4 是否不允许返回 null 或语法已更改的操作?

错误页面显示我当前的路线是Rails.root: /Users/abcde/Sites/RoR/my_app/,这是我运行rails 服务器的地方,所以我不确定这是否重要。

路由跟踪和日志只是重申我的路由 (/say/hello/) 不存在),但如果需要,我可以发布它们。

【问题讨论】:

标签: ruby-on-rails ruby routes ruby-on-rails-4


【解决方案1】:

那个语法好像老了,我会用:

get '/say/hello'

如果这不起作用,我会指定控制器和操作:

get '/say/hello', to: 'say#hello'

【讨论】:

  • 两者都给我以下错误:缺少模板say/hello, application/hello with {:locale=>[:en], :formats=>[:html], :handlers=>[: erb,:builder,:raw,:ruby,:jbuilder,:coffee]}。在以下位置搜索:*“/Users/abcde/Sites/RoR/my_app/app/views”
  • 啊是的,所以你应该关注@Ayonix的评论,将视图文件重命名为app/views/say/hello.html.erb
  • 太好了,正在工作。所以我猜这意味着 Rails 4 应用程序只接受显式路由?
  • AFAIK 两者都接受...但我不确定 connect 是否适用于 Rails 2。
【解决方案2】:
match '/:controller/:action', :via => :get

应该可以!

【讨论】: