2016-01-18 32 views
0

我使用中間人的博客輸出所有博客文章的摘要頁面上,像這樣:分裂紅寶石內容與in_groups_of

<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

['可枚舉#each_slice'(http://ruby-doc.org/core-2.3.0/Enumerable.html#method-i-each_slice)會因爲你正在使用'FALSE'爲你做這個'fill_with'參數。例如'page-articles.each_slice(3).with_index do | article,i |' – engineersmnky

回答

0

Array#in_groups_ofactivesupport延伸通過導軌加入到允許你具有固定數量的元素(缺省nil的分裂和訪問相等的組(Array)將填充不均勻分割。例如

require "active_support/core_ext/array" 
a = (1..5).to_a 
a.in_groups_of(2) 
#=> [[1,2],[3,4],[5,nil]] 

當您將第二個參數(fill_with)作爲false傳遞時,它不再返回相等的組,而是將元素拆分爲n個元素的組,並且當拆分不均勻時,最後一個組將成爲其餘元素,而不管n。

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

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 

實際可用,無需使用activesupport因爲你是在這種情況下我們的第二個參數爲false,而不是require -ing功能,你不我不推薦使用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> 

這將按照要求運行,沒有任何額外的開銷,因爲Enumerable是ruby核心的一部分。

0

Array#in_groups_of不是核心Ruby的一部分,但作爲Active Support Core擴展的一部分由Rails添加。

您可以通過要求使用Active Support擴展。

require "active_support/core_ext/array" 
+0

謝謝。我包括寶石,捆綁,並顯示數據錯誤。所以現在,問題是語法。 each_with_index似乎與in_groups_of – JCHASE11

+0

在我的簡單測試,'in_groups_of'似乎與'each_with_index' –

+1

'#in_groups_of'做工精細用'FALSE'作爲'fill_with'說法好像你可以只使用'可枚舉#each_slice'被衝突而不需要額外的需求。例如'a =(1..5).to_a; a.in_groups_of(2,false)== a.each_slice(2).to_a; #=> true# – engineersmnky