我正在为我的应用程序制作一个留言板,它具有典型的三种资源来使其全部工作:论坛、主题和帖子。路由定义如下:
resources :forums do
resources :topics do
resources :posts
end
end
主题将帖子定义为嵌套资源,因为当您创建新主题时,会创建一个新帖子以启动线程。这样一切正常。但我被困在主题的“显示”页面上。在该页面上,就像任何留言板模型一样,在显示所有帖子后,底部有一个表单来添加新帖子/回复。一旦触发了帖子的创建操作,它将重定向回主题等。实现该表单是我的绊脚石。
通常我会想到这样的事情......
<%= form_for([@topic, @post]) do |f| %>
...
<% end %>
...只有页面返回“未定义的方法 `topic_posts_path'”错误。这并不奇怪,因为查看 rake 路由会将其作为 Posts 的创建操作返回。
forum_topic_posts POST /forums/:forum_id/topics/:topic_id/posts(.:format) {:controller=>"posts", :action=>"create"}
想我会尝试 <%= form_for([@forum, @topic, @post]) do |f| %> 在 form_for 中,但只是返回了同样的错误。考虑到我需要给它实际的路径,我给了 <%= form_for :url => forum_topic_posts_url do |f| %> 试一试,但它也不在乎。
谷歌搜索后,大多数论坛教程都已过时,或者没有在主题页面上添加新帖子表单,只显示了我已经完成的几乎所有内容。
我能够提出的唯一另一件事是建议不要将资源嵌套三层或更多层,但没有提到“为什么”,更不用说提出合适的替代方案了。此外,上面的路由路径似乎是这种动作最合乎逻辑的路径。
那么,在这种设置中,如何让 Post 表单在 Topic Show 页面上工作呢?