2011-08-07 107 views
2

Rails知道保持乾爽。Rails有沒有其他的方法來做這個循環? DRY

我要創建這樣一個表:http://www.duoh.com/csstutorials/tablesv2/

有沒有這樣做重複循環的任何其他方式?

<tbody> 
    <tr> 
     <th class="column1" scope="row">Data usage</th> 

<%= @something.each do |info| %> 
     <td><%= info.name %></td> 
<% end %> 
    </tr> 
    <tr class="odd"> 
     <th class="column1" scope="row">Opslag Capaciteit</th> 

<%= @something.each do |info| %> 
<td><%= info.price %></td> 
<% end %> 
    </tr> 
    </tbody> 

回答

0

使用HAML會擦乾了很多:

%tbody 
    %tr 
    %th.column1{:scope=>"row"} Data usage 
    [email protected] do |info| 
     %td= info.name 
    %tr.odd 
    %th.column1{:scope=>"row"} Opslag Capaciteit 
    [email protected] do |info| 
     %td= info.price 

很抱歉,如果下面的代碼無法正常工作。這很複雜,我還沒有測試過。

如果你真的想使它更簡單,那麼你可以把這樣的ApplicationHelper一個輔助函數(或任何其他輔助模塊,可在此視圖):

def my_row(name, &block) 
    @row_count ||= -1 
    @row_count += 1 
    row_contents = content_tag(:th, name, :class=>'column1', :scope=>'row') 
    @something.each do |item| 
    row_contents += content_tag(:td, capture(item, &block)) 
    end 
    content_tag(:tr, row_contents, :class => @row_count.even? ? 'even' : 'odd') 
end 

然後在你的視圖只是做:

%tbody 
    =my_row "Data Usage" do |item| 
    =item.name 
    =my_row "Opslag Capaciteit" do |item| 
    =item.price 

或ERB我認爲這將是:

<tbody> 
    <%= my_row "Data Usage" do |item| %> <%= item.name %> <% end %> 
    <%= my_row "Opslag Capaciteit" do |item| %> <%= item.price %> <% end %> 
</tbody> 
0

抽象功能正是紅寶石塊/收益結構的目的。

在助手:

def tds list 
    list.map do |item| 
    content_tag :td, yield(item) 
    end.join("\n") 
end 

然後在您的視圖:

<%= tds @something {|i| i.name } %> 

<!-- other stuff --> 

<%= tds @something {|i| i.price } %> 
相關問題