2

問題:異なるコントローラーから複数のビューページをどのようにレンダリングしますか?

私のviews/layouts / application.html.erbでは、yieldメソッドを使用してviews / posts/index.html.erbを呼び出します。

<div class='span10'>
    <%= yield %>
</div>

その上、 yieldでviews / good_posts/index.html.erbを呼び出したいと思いました。そのため、その特定のインデックスファイルでは、すべてのコードをcontent_forメソッドでラップします。

<%= content_for :good_post do %> all my content in good_post/index.html.erb <% end %>

application.html.erbに戻り、yieldメソッドを使用してgood_postのインデックスファイルを呼び出そうとしました。

<div class='span10'>
    <%= yield :good_post %>
</div>
<div class='span10'>
    <%= yield %>
</div>

これにより、good_post/indexがpost/indexの上にレンダリングされると思いましたが、機能しませんでした。投稿/インデックスのみが以前のように正しくレンダリングされました。誰かがこれがなぜであるかを説明し、この問題に取り組む正しい方法を教えてもらえますか?私はあなたの助けに感謝します!

4

1 に答える 1

1

@cdesrosiersが言ったように、index.html.erbファイルの名前good_postsをに変更する必要があります_index.html.erb。次に、次のようにアプリケーションでこのビューをレンダリングできます。

<div class='span10'>
    <%= render 'good_posts/index' %>
    <%= yield :good_post %>
</div>
<div class='span10'>
    <%= yield %>
</div>

個人的には、フォルダ内のファイルをフォルダ内のファイルにindex.html.erb変更します。あなたのコードはより良い意味を持ち、それはに関連しているので、あなたはそれをどこで見つけるかを知ることができます。したがって、これを変更する場合は、次のコードを使用してください。good_posts_good_posts.html.erbapp/views/postsposts

<div class='span10'>
    <%= render 'posts/good_posts' %=
    <%= yield :good_post %>
</div>
<div class='span10'>
    <%= yield %>
</div>

もう1つ変更する必要があるのは、 content_for :good_post->content_for :good_postsです。これは、良い投稿には多くの投稿がある可能性があるため、複数形で投稿を使用する必要があるためです。

于 2012-11-18T08:52:36.847 に答える