2013-09-07 2 views
0

수업 일정이 있습니다. @appointments_monday, 우리는 특정 category에 속하는 appointment 다른 있습니다두 번 반복 수행 방법

enter image description here

물론, @appointment.each이 작동하지 않을 것입니다. 특정 카테고리의 몇 가지 약속이 비어있을 수 있기 때문에

enter image description here

: 그것은 뭔가를 생성합니다. 우리는 각 appointment을 판단 @categories을 통해 루프를 시도하고 있지만, 다음과 같이 밝혀 :

enter image description here

<% @appointments.each do |appointment| %> 
     <% @categories.each do |category| %> 
      <% if appointment.category == category %> 
       <%= appointment %> 
      <% else %> 
       placeholder 
      <% end %>  
     <% end %> 
    <% end %> 

나는 문제가 @categories.each 때마다 이상 반복되는 것을 생각합니다. 이 문제를 어떻게 처리해야합니까?

+0

원하는 출력을 표시 할 수 있습니까? 첫 번째 다이어그램입니까? – Daiku

+0

@Daiku 예, 처음입니다. – cqcn1991

+1

그러면 내부 및 외부 반복기를 전환해야한다고 생각합니다. 그러나 카테고리가 일치하는지 확인하는 테스트가 루비가 아닌 C로되어 있기 때문에 Carol의 대답은 아마 더 효율적입니다. – Daiku

답변

2

약속과 범주를 모두 반복하는 대신에 (범주가 있는지 여부에 상관없이 각 범주에 대해 결과를 출력하기를 원하기 때문에) 한 번만 범주를 반복하고 다음과 함께 약속이 있는지 확인하십시오. 해당 카테고리 :

<% @categories.each do |category| %> 
    <% category_appointments = @appointments.select {|a| a.category == category } %> 
    <% if category_appointments.empty? %> 
    <%= placeholder %> 
    <% else %> 
    <%= category_appointments %> 
    <% end %> 
<% end %> 

selectArray에 포함 Enumerable의 방법이다.

+0

정말 작동합니다. 그러나 나는 아직도이 방법이 직관에 반하는 것을 발견한다. '@ appointments'로 할 수 있을까요? 나는 그것이 테이블을 채워야하는 방법이라고 느꼈다. – cqcn1991

+0

아, 문제를 오해하고 있는지 궁금합니다. 여러분은 테이블의 셀을 채우고 있습니다. 행은'@ appointments'에있는 모든 약속 객체들의 집합을위한 것이고, 열은 각각의'category'에 맞습니까? 나는 "그들이 속한 세포에 모든 약속을 두자."보다는 "행에있는 각 세포를 방문하여 무엇이든 여기 있는지 알아 봅시다"라고 생각했습니다. 그게 도움이 되니? 나는 왜 당신이 @pointments를 반복하고 싶어하는지 모르겠다. 내가 오해하고있는 것처럼 들리면 정교 할 수 있겠는가? – carols10cents

+1

아! 나는 당신의 요지를 얻는다. 이제 나에게 더 의미가 있습니다. – cqcn1991