Rails知道保持干燥。
我打算创建一个这样的表: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 :(得分:0)
使用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
或在ERB我认为会是:
<tbody>
<%= my_row "Data Usage" do |item| %> <%= item.name %> <% end %>
<%= my_row "Opslag Capaciteit" do |item| %> <%= item.price %> <% end %>
</tbody>
答案 1 :(得分:0)
抽象功能正是ruby的块/产量结构的目的。
帮帮人:
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 } %>