铁轨上的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_path
和messages_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
您可能还想检查这些RailsCasts:
http://railscasts.com/episodes/203-routing-in-rails-3 ,
http://railscasts.com/episodes/231-routing-walkthrough ,
http://railscasts.com/episodes/232-routing-walkthrough-part-2
和这些页面:
http://edgeguides.rubyonrails.org/routing.html
http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/
http://markconnell.co.uk/posts/2010/02/rails-3-routing-examples
除了别人已经说过的话之外,还有一些事情:
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 。
- 允许子域指向计算机的Apache2配置:端口
- Rails 3,自定义操作和HTML请求方法
- Stack Level Too Deep错误 – 我认为使用强参数生成
- 如何在发送Restful POST / PUT API之前使用rails3.2.x获取CSRF令牌,而没有来自服务器端的任何表单/ UI?
- 文字和构造函数之间的差异? ( vs Array.new和{} vs Hash.new)
- 在FB.login调用之后,Facebook JavaScript SDK不会在chrome中设置访问令牌cookie
- Rails没有通过连接模型运行has_many的destroy回调
- 从嵌套表单发出combobox中的更新类
- Poltergeist Stripe checkout.js