Rails 3 link_to 路由(编辑)嵌套资源
Posted
技术标签:
【中文标题】Rails 3 link_to 路由(编辑)嵌套资源【英文标题】:Rails 3 link_to routes (edit) nested resources 【发布时间】:2011-07-09 04:55:35 【问题描述】:很抱歉,如果其他地方有人问过这个问题,但我无法弄清楚。我有一个包含部分、主题和回复的论坛。我正在尝试从显示主题视图中编辑和删除回复。这是结构:
resources :sections do
resources :topics do
resources :replies
end
end
所以我做了一个 rake routes 来查看我在哪里链接了我的编辑回复。我看到它的 edit_section_topic_reply 并在我的 link_to 中添加了 _path 。现在这是我想不通的。我传递了什么参数?不应该是:
<%= link_to 'Edit', edit_section_topic_reply_path(@reply, @topic, @section) %>
当我这样做时,我在Topics#show
中得到一个ActionController::RoutingError
。
No route matches :topic_id=>#<Topic id: 2, section_id: 2, user_id: nil, subject: "subject", body: "body", created_at: "2011-03-04 08:37:37", updated_at: "2011-03-04 21:37:16">, :controller=>"replies", :action=>"edit", :section_id=>nil, :id=>#<Section id: 2, name: "Section", description: "Section Description", created_at: "2011-03-04 07:50:56", updated_at: "2011-03-04 07:50:56">
似乎它没有传递 ID,但是之前的巢,我的新主题工作正常
new_section_topic_reply_path(@topic, @section)
【问题讨论】:
【参考方案1】:我真的不喜欢link_to
助手的这一方面。为了使您的代码更具可读性且不易出错,我建议您明确说明您传入的 ID。
<%= link_to 'Edit', edit_section_topic_reply_path(:id => @reply.id,
:topic_id => @topic.id,
:section_id => @section.id) %>
由于link_to
中的参数无序,我遇到了太多微妙且看似疯狂的错误。
【讨论】:
啊,这样一来,我意识到回复 ID 并没有调用它的特定 ID。真是愚蠢的错误,我在一个循环中,所以@reply当然没有说它实际上是哪个ID。 以另一种方式解决了它。以这种方式回复.id。感谢您的帮助! 另外,我把它弄反了。它是(@section、@topic、路径)。 我想你的意思是(@section、@topic、@reply)。【参考方案2】:编辑链接的另一种方式
<%= link_to [:edit,@section,@topic,@reply] %>
【讨论】:
【参考方案3】:我认为正确的顺序应该是:
<%= link_to 'Edit', edit_section_topic_reply_path(@section, @topic, @reply) %>
【讨论】:
以上是关于Rails 3 link_to 路由(编辑)嵌套资源的主要内容,如果未能解决你的问题,请参考以下文章