0

私は自分のアプリケーションのメッセージボードに取り組んでおり、それをすべて機能させるための典型的な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レベル以上下にネストしないことを提案しましたが、「なぜ」の手前で止まり、ましてや適切な代替案を提案しませんでした。さらに、上記のルートパスは、この種のアクションの最も論理的なパスのようです。

では、この種の設定で投稿フォームをトピック表示ページで機能させるにはどうすればよいですか?

4

1 に答える 1

0

"form_for([@ forum、@topic、@post])"を試すと、コントローラーに@forum変数が設定されていますか?

于 2011-05-01T18:08:03.793 に答える