铁轨上的ruby

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

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

在我的系统’rake routes’上给出了以下输出(摘录与resources :messages相关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)”forms的路径。 类似地,生成的其他路由名称是“new_message”,“edit_message”和“message”。 您还可以控制路线的命名 。
  • HTTP Verb (第二列):它提供有关此路由将响应的http动词的信息。 如果它不存在,则表示该路由将响应所有http动词。 通常浏览器只支持“GET”和“POST”动词。 Rails通过传递带有动词名称作为值的参数“_method”来模拟“PUT”和“DELETE”以模拟“PUT”和“DELETE”。 默认情况下,链接会在“POST”中生成“GET”动词和表单提交。 与第一列一起使用,如果你使用带有http“GET”的messages_path ,它将匹配第一条路线,如果你将它与“POST”一起使用,它将匹配第二条路线。 这是非常重要的注意,具有不同http动词的相同url可以映射到不同的路由。
  • URL模式 (第3列):它就像一个有限的特色正则表达式,具有自己的语法。 “:id”的行为类似于(.+)并捕获参数“id”中的匹配项,以便您可以执行类似params[:id]并获取捕获的字符串。 大括号()表示此参数是可选的。 您还可以在帮助程序中传递这些参数以生成相应的路径。 例如,如果您使用message_path(:id => 123) ,则会生成输出“/ messages / 123”。
  • 此路由的位置 (第4列):此列通常告诉控制器以及将处理与此路由匹配的请求的相应操作。 如果您定义了任何其他信息,可以在此处添加约束信息。

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

(这可能只是在这里编写所有这些可能只是一种矫枉过正,但由于这些信息无法以统一的方式提供,因此我遇到了很多问题。一直想写出来并最终完成。我希望它可以在http://上找到edgeguides.rubyonrails.org/routing.html在另一部分。)

这是一个非常好的路由摘要: 来自Outside In的Rails路由 。

关于什么:

 <%= link_to "magazines", magazines_path %> 

你应该知道纯粹的脚手架创造的所有路线。 在Rails指南中很容易解释。

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

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

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 %> 

编辑链接进入存储在@magazine的杂志的edit页面( /magazines/[ID]/edit ),后面的链接进入索引页面( /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为特定资源构建索引,新建,编辑,显示,创建,更新,销毁的基本路由。

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