Rails有没有其他方法来做这个循环? 干

Rails因保持干燥而闻名。

我打算创建一个这样的表: http : //www.duoh.com/csstutorials/tablesv2/

有没有其他方法做重复循环?

  Data usage      Opslag Capaciteit      

使用HAML会使干扰很多:

 %tbody %tr %th.column1{:scope=>"row"} Data usage -@something.each do |info| %td= info.name %tr.odd %th.column1{:scope=>"row"} Opslag Capaciteit -@something.each 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 

或在再培训局,我认为会是:

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

提取function正是ruby的块/产量结构的目的。

帮手:

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

然后在你看来:

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