0

我正在为我的应用程序制作一个留言板,它具有典型的三种资源来使其全部工作:论坛、主题和帖子。路由定义如下:

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 页面上工作呢?

4

1 回答 1

0

当您尝试“form_for([@forum,@topic,@post])”时,您已经在控制器中设置了@forum 变量?

于 2011-05-01T18:08:03.793 回答