2011-11-29 104 views
1

我有一個數組:如何分組ActiveRecord對象的數組?

<% @widgets.each do |w| %> 
... 
<% end %> 

我怎樣才能在羣體中顯示它們?比方說4:

<div>1, 2, 3, 4</div> 
<div>5, 6, 7, 8</div> 
etc. 

謝謝。

+0

謝謝。你們兩人在3分鐘前回復。我不知道哪個回答標記爲有效:(我會等着看誰是第一個 –

+2

所有的東西都是平等的,我總是把它交給聲譽較低的人:)(另外,他的第一個回答擊敗了我52秒;將鼠標懸停在「xx分鐘前」以查看實際時間作爲提示。) – Phrogz

+0

好的,這很公平,謝謝! –

回答

1

嘗試使用each_slice(n)

require 'erb' 

@widgets = (1..8).to_a 

template = <<EOF 
<% @widgets.each_slice(4) do |w| %> 
    <div><%= w.join(', ') %></div> 
<% end %> 
EOF 

puts ERB.new(template).result(binding) 
# => 
    <div>1, 2, 3, 4</div> 
    <div>5, 6, 7, 8</div> 
2

你給具體的例子,你想each_slice

<% @widgets.each_slice(4) do |ws| %> 
    <div><%= ws.join(', ') %></div> 
<% end %> 

您可能也有興趣each_cons(每個連續的,如「1,2 ,3「,」2,3,4「,」3,4,5「等)或group_by進行任意分組。

Person = Struct.new(:name,:age,:male) do 
    def inspect 
    "<#{'fe' unless male}male '#{name}' #{age}>" 
    end 
end 

all = [ 
    Person.new("Diane", 12, false), 
    Person.new("Harold", 28, true), 
    Person.new("Gavin", 38, true), 
    Person.new("Judy", 55, false), 
    Person.new("Dirk", 59, true) 
] 

p all.group_by(&:male) 
#=> { 
#=> false=>[ <female 'Diane' 12>, <female 'Judy' 55> ], 
#=> true =>[ <male 'Gavin' 38>, <male 'Harold' 28>, <male 'Dirk' 59> ] 
#=> } 

p all.group_by{ |person| (person.age/10) * 10 } 
#=> {10=>[<female 'Diane' 12>], 
#=> 20=>[<male 'Harold' 28>], 
#=> 30=>[<male 'Gavin' 38>], 
#=> 50=>[<female 'Judy' 55>, <male 'Dirk' 59>]}