2016-10-06 1 views
0

신발 이름이 100 개인 신발이 있습니다. 100 개를 모두 연속으로 표시하고 싶지는 않습니다. 5, 녹색 상자, 다음 5 및 동일한 녹색 상자를 표시하고 싶습니다. 그러나 내 코드에 문제가 있습니다.레일 사이의 배열 사이에 루프를 삽입하십시오.

<% @shoes.each.with_index(1) do |shoe, index| %> 
    <% while index < 101 do %> 
    <%= shoe.name %> 
    <% if index % 5 == 0 %> 
     <%= Green Box %> 
    <% end %> 

답변

2

당신은 in_groups_of(x)

<% @shoes.in_groups_of(5) do |shoe_groups| %> 
    <% shoe_groups.each do |shoe| %> 
     <%= shoe.name %> 
    <% end %> 
    <%= 'Green Box' if shoe_groups.size % 5 == 0 %> 
<% end %> 
+1

이 경우'in_shoe_groups % 5 == 0'은 필요하지 않습니다. 왜냐하면 in_groups_of는 5 신발을 반환 할 것이므로 그룹의 신발을 반복하여 그린 박스 코드를 출력하면됩니다. – Doon

+0

글쎄, 마지막 그룹에 신발이 4 개 밖에없는 것 같으면 그린 박스를 표시하지 않을 것입니다. – kobaltz

+1

'in_groups_of'는 배열을 생성하고 배열은 '%'메시지를받지 않으므로 오류가 발생합니다. if 문을 제거하면 각 그룹 다음에 녹색 상자가 표시됩니다. <5,). – Doon

0

귀하의 구문을 찾는 것은 여러 장소에서 잘못된 - 열거 잘못, 당신은 몇 가지 end 문을 누락된다. 또한 index이 예약어가 아니더라도 일반적으로 허용되는 인덱스 스타일은 i과 같은 단일 문자 변수입니다. 그것은

<% @shoes.each_with_index(1) do |shoe, i| %> 
    <% while i < 101 do %> 
    <%= shoe.name %> 
    <% if i % 5 == 0 %> 
     <%= Green Box %> 
    <% end %> 
    <% end %> 
<% end %> 

(그러나 개인적으로는, 내가보기에 인덱스를 < 101 블록을하지 않을 것이어야한다 - 나는 @shoes를 생성하고보기로 전송 컨트롤러 만에 100 개 요소를 전송해야 할 것 배열)

+1

내부 while 루프는 필요하지 않으며 무한 루프가 발생합니다. , outer'with_ind_index'는 루프를 반복해서 반복합니다. each_with_index는 인수를 취하지 않습니다. – Doon

관련 문제