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 之上呈现,但它不起作用;只有 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.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-> content_for :good_posts,因为好的帖子可能有很多帖子,所以你应该使用复数形式的帖子。

于 2012-11-18T08:52:36.847 回答