铁轨上的红宝石

use*_*447 2 routes ruby-on-rails scaffold

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

rub*_*ish 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"}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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