我基本上有这两个模板:
<article>
<section>
...
</section>
<section>
...
</section>
</article>
和
@posts.each do |post|
<h3> post.title </h3>
<p> post.body </p>
<hr />
我可以使用...
替换<section>
中的yield
并填写此部分中的每个帖子。现在我想做的是每回合交替一次,这样两个部分中的每一部分都被平等地填满。我敢肯定必须有一些相对简单的方法来实现这一目标吗?我现在想不出一个。
编辑:不要误会我的意思。第一个模板可以(也可能应该)与第二个模板合并。
答案 0 :(得分:1)
在第一部分中执行此操作:
@posts.select.each_with_index{|_,i| i.even? }
这是另一个:
@posts.select.each_with_index{|_,i| i.odd? }
如果你不介意这些元素不是在列之间交替而是从上到下,你可以这样做:
<article>
<% @posts.in_groups(2, false) do |grouped_posts| %>
<section>
<% grouped_posts.each do |post| %>
<h3> post.title </h3>
<p> post.body </p>
<hr />
<% end %>
</section>
<% end %>
</article>
在Rails之外,您可以从活动支持gem中提取in_groups
的必要位
require 'active_support/core_ext/array/grouping'
或者您可以使用这种非常类似的替代方法:
@posts.each_slice((@posts.size/2.0).ceil).to_a
唯一的区别是:
@posts = []
@posts.in_groups(2, false) #=> [[], []]
@posts.each_slice((@posts.size/2.0).ceil).to_a #=> []