Rails:使用Yield,调用多个View页面

时间:2012-11-18 05:30:45

标签: ruby-on-rails yield content-for

问题:如何从不同的控制器渲染多个视图页面?

在我的 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像以前一样正确呈现。有人可以解释为什么会这样,并告诉我解决这个问题的正确方法吗?感谢您的帮助!

1 个答案:

答案 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,因为好的帖子可能有很多帖子,所以你应该使用复数的帖子。