私は自分のアプリケーションのメッセージボードに取り組んでおり、それをすべて機能させるための典型的な3つのリソース、フォーラム、トピック、投稿があります。ルートは次のように定義されます。
resources :forums do
resources :topics do
resources :posts
end
end
トピックには、ネストされたリソースとして定義された投稿があります。新しいトピックを作成すると、スレッドを開始するための新しい投稿が作成されます。すべてがうまくいくように。しかし、私はトピックの「表示」ページで立ち往生しています。そのページでは、他の掲示板モデルと同様に、すべての投稿を表示した後、下部に新しい投稿/返信を追加するためのフォームがあります。投稿の作成アクションがトリガーされると、トピックなどにリダイレクトされます。そのフォームを実装することは、私がつまずいたことです。
通常、私はこのようなことを考えます...
<%= form_for([@topic, @post]) do |f| %>
...
<% end %>
...ページのみが「未定義のメソッド`topic_posts_path'」エラーを返します。そして、それは驚くべきことではありません。レーキルートを見ると、これが投稿の作成アクションとして返されます。
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|を指定しました。%>試してみましたが、それも気にしませんでした。
グーグルの後、ほとんどのフォーラムチュートリアルは時代遅れであるか、トピックページに新しい投稿フォームを追加することをやめ、私がすでに解決したほとんどすべてのものだけを表示しました。
私が明らかにすることができた他の唯一のことは、リソースを3レベル以上下にネストしないことを提案しましたが、「なぜ」の手前で止まり、ましてや適切な代替案を提案しませんでした。さらに、上記のルートパスは、この種のアクションの最も論理的なパスのようです。
では、この種の設定で投稿フォームをトピック表示ページで機能させるにはどうすればよいですか?