我正在为我的应用程序制作一个留言板,它有一个典型的三种资源可以使它全部工作:论坛,主题和帖子。路线定义如下:
resources :forums do
resources :topics do
resources :posts
end
end
主题将帖子定义为嵌套资源,因为在创建新主题时,会创建一个新帖子以启动该线程。这一切都运作良好。但我被困在Topic的'Show'页面上。在该页面上,与任何留言板模型一样,在显示所有帖子后,底部有一个表单添加新的帖子/回复。一旦帖子的创建动作被触发,它将重定向回到主题等。实现该形式是我被绊倒的。
通常我会想到这样的事情......
<%= 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"}
想我会尝试&lt;%= form_for([@ forum,@ topic,@ post])do | f | %GT;在form_for中,但只是给我回复了同样的错误。想象我需要给它实际路径,我给了&lt;%= form_for:url =&gt; forum_topic_posts_url do | f | %GT;尝试,但它也不关心。
在谷歌搜索之后,大多数论坛教程已经过时或者没有在主题页面上添加新的帖子表单,只显示了我已经制定的所有内容。
我唯一能够出现的另一件事就是建议不要将三个或更多级别的资源嵌套,但是没有“为什么”,更不用说建议一个合适的选择。此外,上面的路径路径似乎是这种行为最合乎逻辑的路径。
那么如何在这种设置中完成使用Post表单在Topic Show页面上工作呢?
答案 0 :(得分:0)
当您尝试“form_for([@ forum,@ topic,@ post])”时,您在控制器中设置了@forum变量?