我正在使用中间人的博客在页面上输出所有博客帖子的摘要:
<ul>
<% page_articles.each_with_index do |article, i| %>
<% unless article.data['tags'].include?('featured') %>
<li class="Project">
<h3><%= link_to article.title, article.url %></h3>
</li>
<% end %>
<% end %>
</ul>
这很好用,但我需要在3个条目之后打破这样:
<ul>
<li class="Project"><li>
<li class="Project"><li>
<li class="Project"><li>
</ul>
<div class="break"></div>
<ul>
<li class="Project"><li>
<li class="Project"><li>
<li class="Project"><li>
</ul>
从研究来看,似乎ruby的in_groups_of
似乎是这里的方式,但无法使语法正常工作。这就是我所拥有的:
<ul>
<% page_articles.in_groups_of(3, false).each_with_index do |article, i| %>
<% unless article.data['tags'].include?('featured') %>
<li class="Project">
<h3><%= link_to article.title, article.url %></h3>
</li>
<% end %>
<% end %>
</ul>
它返回undefined method 'in_groups_of'
。此外,似乎除非在将逻辑分成三个一组之前应该应用逻辑。有关如何改善这一点的想法吗?
答案 0 :(得分:1)
Array#in_groups_of
是Rails添加的A B C D E F G H
扩展程序,允许您拆分和访问具有固定数量元素的相等组(activesupport
)(默认情况下Array
将填补不均匀的分裂。例如
nil
当您将第二个参数(require "active_support/core_ext/array"
a = (1..5).to_a
a.in_groups_of(2)
#=> [[1,2],[3,4],[5,nil]]
)作为fill_with
传递时,它不再返回相等的组,而是将元素拆分为n个元素的组,当拆分不均匀时,最后一个组将是剩下的元素,无论n。
false
这种不相等的分组功能实际上无需使用require "active_support/core_ext/array"
a = (1..5).to_a
a.in_groups_of(2,false)
#=> [[1,2],[3,4],[5]]
到Enumberable#each_slice
activesupport
由于在这种情况下您将第二个参数指定为a = (1..5).to_a
a.each_slice(2).to_a
#=> [[1,2],[3,4],[5]]
require "active_support/core_ext/array"
a.in_groups_of(2,false) == a.each_slice(2).to_a
#=> true
而不是false
- 您不需要的功能我建议使用require
,如下所示:
Enumerable#each_slice
由于<ul>
<% page_articles.each_slice(3).with_index do |article, i| %>
<% unless article.data['tags'].include?('featured') %>
<li class="Project">
<h3><%= link_to article.title, article.url %></h3>
</li>
<% end %>
<% end %>
</ul>
是ruby核心的一部分,因此无需任何额外开销即可正常运行。
答案 1 :(得分:0)
Array#in_groups_of
不是核心Ruby的一部分,但是作为Active Support Core扩展的一部分由Rails添加。
您可以通过要求使用Active Support扩展程序。
require "active_support/core_ext/array"