铁轨上的红宝石

时间:2011-08-13 22:39:50

标签: ruby-on-rails routes scaffold

我很难理解rails 3中的路线。我创建了两个脚手架:用户和杂志。用户可以登录,但我无法链接到杂志页面。我知道这与创建路线有关。如果我通过URL导航到localhost:3000 /杂志,我可以看到我创建的多个杂志和每个用户与每个杂志相关联。我似乎无法连接点。我想创建一个从用户页面到杂志页面的链接。我知道这是基本的,但所有路线文件对我来说都没有意义。非常感谢你的时间。

6 个答案:

答案 0 :(得分:19)

以前的答案中指出的资源非常棒,这就是我开始的地方。我仍然提到我以防万一我被困在某个地方。我在追索中发现的一件事是,它不包括阅读路线表的解释,即命令rake routes的输出,并且需要时间来将各个部分组合在一起。虽然如果您耐心地阅读整本指南,您可以将各个部分放在一起。

在我的系统上'rake routes'给出以下输出(摘录与resources :messages相关)

    messages GET    /messages(.:format)            {:action=>"index", :controller=>"messages"}
             POST   /messages(.:format)            {:action=>"create", :controller=>"messages"}
 new_message GET    /messages/new(.:format)        {:action=>"new", :controller=>"messages"}
edit_message GET    /messages/:id/edit(.:format)   {:action=>"edit", :controller=>"messages"}
     message GET    /messages/:id(.:format)        {:action=>"show", :controller=>"messages"}
             PUT    /messages/:id(.:format)        {:action=>"update", :controller=>"messages"}
             DELETE /messages/:id(.:format)        {:action=>"destroy", :controller=>"messages"}

此表中的所有列都提供了非常重要的信息:

  • 路线名称(第1列):这将提供路线的名称,您可以将“_url”或“_path”附加到该路线以获取路线的帮助名称。例如,第一个是“消息”,因此您可以在视图和控制器中使用messages_pathmessages_url作为辅助方法。查看表格,您可以告诉messages_path将生成“/messages(.:format)”形式的路径。类似地,生成的其他路由名称是“new_message”,“edit_message”和“message”。您还可以控制naming of routes
  • HTTP动词(第2列):这会提供有关此路线将响应的http动词的信息。如果它不存在,则表示该路由将响应所有http动词。通常浏览器只支持“GET”和“POST”动词。 Rails通过传递带有动词名称作为值的参数“_method”来模拟“PUT”和“DELETE”,以模拟“PUT”和“DELETE”。默认情况下,链接会在“POST”中生成“GET”动词和表单提交。与第一列一起使用时,如果您将messages_path与http“GET”一起使用,它将与第一条路线匹配,如果您将其与“POST”匹配,则它将匹配第二条路线。这一点非常重要,不同的http动词可以映射到不同的路径。
  • 网址格式(第3列):它就像一个有限特色的正则表达式,具有自己的语法。 “:id”的行为与(.+)类似,并在参数“id”中捕获匹配项,以便您可以执行params[:id]之类的操作并获取捕获的字符串。大括号()表示此参数是可选的。您还可以在帮助程序中传递这些参数以生成相应的路径。例如,如果您使用message_path(:id => 123),则会生成输出“/ messages / 123”。
  • 此路由的位置(第4列):此列通常告诉控制器以及将处理与此路由匹配的请求的相应操作。如果您定义了任何信息,可以在此处获得其他信息,例如约束。

因此,如果“localhost:3000 / magazines”是您想要的页面,您应该使用url模式检查路由表为“/magazines(.:format)”并自行解析它以找出您需要的内容。如果您刚开始使用轨道,我建议您从上到下阅读整个guide

(这可能只是在这里写下所有这些可能只是一种矫枉过正,但由于这些信息无法以统一的方式提供,我遇到了很多问题。一直想写出来并最终做到。我希望它可以在{ {3}}在另一部分中。)

答案 1 :(得分:2)

这是一个非常好的路线摘要:Rails Routing from the Outside In

答案 2 :(得分:1)

怎么样:

<%= link_to "magazines", magazines_path %>

你应该知道纯粹的脚手架创造的所有路线。这很简单,并在Rails指南中进行了解释。

以下是详细信息:http://guides.rubyonrails.org/routing.html#paths-and-urls

答案 3 :(得分:0)

答案 4 :(得分:0)

除了别人已经说过的话之外,还有一些事情:

magazines_path是索引页面链接的最可能名称。

<%= link_to "Magazines", magazines_path %>

所以应该这样做。但是如果你想看路线,我建议你运行rake routes,它会列出Rails正在考虑的有效路线名称。如果您想了解它们的使用方法,请查看您脚手架的视图页面。例如,app/views/magazines/show.html.erb可能在底部有类似的内容:

<%= link_to 'Edit', edit_magazine_path(@magazine) %> |
<%= link_to 'Back', magazines_path %>

编辑链接转到存储在edit中的杂志的/magazines/[ID]/edit页面(@magazine),后面的链接转到索引页面(/magazines/)。单个杂志的展示页面为magazine_path(@magazine),新路径为new_magazine_path(@magazine)

你一定要查看其他人发布的资源--Rails路由是灵活的,但非常“神奇” - 但无论如何,这应该有助于给你一些背景。

此外,这应该是自动生成的,但我认为大多数人都假设您的config/routes.rb包含以下内容:

My::Application.routes.draw do
  resources :magazines
  resources :users
  # or the above combined as resources :magazines, :users
end

这就是告诉rails为特定资源构建索引,新建,编辑,显示,创建,更新,销毁的基本路由。

答案 5 :(得分:0)

到目前为止,我发现的路线的最佳解释是在The Rails 3 Way中由Obie Fernandez(Hash Rocket的创始人)。