2009-06-14 1 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