问题:如何从不同的控制器渲染多个视图页面?
在我的 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之上呈现,但它不起作用;只有post / index像以前一样正确呈现。有人可以解释为什么会这样,并告诉我解决这个问题的正确方法吗?感谢您的帮助!
答案 0 :(得分: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.erb
文件夹中的app/views/posts
文件。您的代码具有更好的含义,您可以知道在何处找到它,因为它与posts
有关。因此,如果您更改此设置,请使用以下代码:
<div class='span10'>
<%= render 'posts/good_posts' %=
<%= yield :good_post %>
</div>
<div class='span10'>
<%= yield %>
</div>
您应该更改的另一个是content_for :good_post
- &gt; content_for :good_posts
,因为好的帖子可能有很多帖子,所以你应该使用复数的帖子。