2009-06-14 3 views
2

これはおそらく非常に簡単ですが、わかりにくいです。そのようfind_by_sql結果からレールの列でループする

<% for room in @scrape %> 
<tr id="page_<%= room.id %>"> 
    <th scope="row" class="<%= cycle("spec", "specalt") -%>"><%=h room.name %></td> 
    <td class="<%=current_cycle%>"><%=h room.day1 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day2 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day3 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day4 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day5 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day6 %></td> 
    <td class="<%=current_cycle%>"><%=h room.day7 %></td> 
    <td class="<%=current_cycle%>"><%= select_tag("room[#{room.id}]", options_for_select(0..room.spots,0)) %></td> 

</tr> 
<% end %> 

は私が部分的に持っている

ID   Room  Day1  Day2 Day3 Day4 Day5 Day6 Day7 
    18298 Blue Room 13.23 13.23 13.23 13.23 13.23 13.23 13.23 

しかし、私はコラムスルー、どのようにすることができます私はループがあるだろう何日かわかりません異なる日の結果?

答えて

8

これは、ブロック/収量を使用してヘルパーで行うことができますが、それはあなたの質問の範囲外です。私は部分の中でこれを行うことによって質問に右に行くでしょう。

<% room.attributes.each do |key, value| %> 
    <% if key.to_s.include?("day") %> 
    <td class="<%=current_cycle%>"><%=h value.to_s %></td> 
    <% end %> 
<% end %> 

アップデート:ここで はヘルパーの例です。このパターンがあなたのアプリに複数回表示されている場合、これはもっとメンテナンス可能で読みやすいと思います。

def attributes_for(model, match, &block) 
    model.attributes.each do |key, value| 
    if key.to_s.include?(match) 
     # we pass key and value in this example. but you can 
     # pass whatever you want to the block. 
     concat(capture(key, value, &block)) 
    end 
    end 
end 

そして、これが今、あなたの部分である:

<% attributes_for(room, "day") do |key, value| %> 
    <td class="<%=current_cycle%>"><%=h value.to_s %></td> 
<% end %> 

コードの総行をもっと、より良いアプリ全体でこれを行うことを予定している場合。

+0

美しい...これはヘルパーになるはずのものですか?部分的ではない? – holden

+0

このパターンを複数の場所で使用する場合は、それをヘルパーに抽出します。それはもっと乾燥していて、もう少し読みやすいです。コードを数分で追加します。 –

+0

これは素晴らしいです。ありがとうございました! – holden

関連する問題