在Rails的集合中渲染集合

时间:2018-07-30 02:08:09

标签: ruby-on-rails

这让我发疯,我认为这应该很简单,但是我已经花了整整一天的时间试图弄清它,却一无所获。我到处都看了,有些东西我一定很想念。

我想在集合的一部分内渲染集合的一部分。

例如。我有一个entries的集合,我想在我的feed部分中进行渲染,我希望feed来自feeds的集合,这样该页面可以显示所有条目所有提要中。

我该怎么做?

类似的东西:

控制器:

@feeds = Feeds.all

allmyfeeds.html.erb

@feeds.each do |feed|
<%= render 'feed' %>
<% end %>

<%= render 'feeds', collection: @feeds %>

_feed.html.erb

<%= render 'items', collection: @items %>

_item.html.erb

<%= item.summary.html_safe %>

但是我真的不知道。

2 个答案:

答案 0 :(得分:1)

部分命名约定确实可以帮助您...

allmyfeeds.html.erb中(我猜测实际上是feeds/index.html.erb),而不是这个...

@feeds.each do |feed|
  <%= render 'feed' %>
<% end %>

您可以简单地称呼它...

<%= render @feeds %>  # this will invoke _feed.html.erb for every feed in the collection, automatically

在您的_feed.html.erb部分内...

# Note: You may need to change `items` to something like `items/items` if it is not located in the same directory
<%= render partial: 'items', locals: { items: feed.items } %>

然后,在部分项目中,您可以访问items,这是该特定供稿的项目的集合

答案 1 :(得分:0)

类似:

<% @feeds.each do |feed| %>
  <%= render partial: 'feed', locals: { feed: feed } %>
<% end %>

在您的_feed.html.erb中:

<h1><%= feed.id %> </h1>
<% feed.entries.each do |entry| %>
  <&= render partial: 'entry', locals: { entry: entry } %>
<% end %>

在您的_entry.html.erb中:

<h2><%= entry.id %></h2>

我假设您的Feed模型具有has_many :entries关联,如果不是这种情况(并且您想要在每个供稿中呈现相同的@entries集合),那么您只需要将@entries集合传递给_feed.html.slim部分,例如:

render partial: 'feed`, locals: { feed: feed, entries: @entries }

并更新您的_feed.html.erb