2012-12-12 2 views
0

이미지를 표시하는 데 회전식 캐 러셀을 사용하고 있습니다. 클라우드에 이미지를 업로드했습니다. 그러나 여하튼 그것은 그것을 반복하고있다. 는 여기 이미지 배열의 첫 번째 URL을 표시해야하고 비활성 항목에서 (이후에 활성화 될 것이다하는) 다른 이미지가 있어야 내가 뭘 원하는 active item에 내 코드Each_with_index가 제대로 작동하지 않습니다.

div id="myCarousel" class="carousel slide"> 
<div class="carousell-inner"> 
    <% @img.each_with_index do |i|%> 
    <% if i.gallery == "Art"%> 
     <div class="active item"> 
      <%= image_tag (i.image.url) %> 
     </div> 

     <% i.next%> <!-- For incrementing the i value but it is not working--> 
     <div class="item"> 
      <%= image_tag (i.image.url)%> 
     </div> 
    <%end%> 
    <%end%> 
    </div> 
</div> 

입니다. 이미지를 반복해서는 안됩니다. 여기서는 i 값이 변경되지 않으므로 이미지가 반복됩니다.

+0

코드를 자르십시오. 'each_with_index'는 가장 확실하게 올바르게 작동합니다. 오류는 귀하의 사용에 있어야합니다. 그러나 이와 관련없는 모든 소음으로 볼 수 없습니다. –

+0

<% @ img.each_with_index do | i, j | %>'귀하의 부품'<%end%> – VenkatK

+0

트리밍을 완료했습니다. @VenkatK : J는 무엇입니까? j는 같은 값을가집니다. 나는 다시 대답이 같을 것이라고 생각한다. 편집을 참조하십시오. 나는 와트를 정확하게 말하고 싶다. –

답변

0

원하는 것을 이해하기 시작했습니다. 데이터를 분리하면 로직을 매우 간단하게 만들 수 있습니다.

<div id="myCarousel" class="carousel slide"> 
    <div class="carousell-inner"> 
    <% @img.keep_if{|i| i.gallery == "Art"}.each do |i|%> 
     <div class="active item"> 
      <%= image_tag (i.image.url) %> 
     </div> 
    <%end%> 

    <% @img.keep_if{|i| i.gallery != "Art"}.each do |i|%> 
     <div class="item"> 
      <%= image_tag (i.image.url)%> 
     </div> 
    <%end%> 
    </div> 
</div> 

컨트롤러에서보기보다는 데이터를 준비하는 것이 좋습니다.

+0

실제로 ur 코드는 아트 갤러리에 속한 모든 이미지가 활성 부분에 표시되도록 표시합니다. 그래서 다시 모든 이미지를 패턴과 같은 스택에 표시합니다. Btw는 회전 목마가 작동하는 방법을 알고 있습니다.? 항목의 div에 –

+0

이 있으면 i 값이 증가해야 활성 부분이 다른 항목으로 이동하면 다른 항목이 표시됩니다. –

0

ive는 수동으로 해답을 찾아 냈습니다. 우선 컨트롤러에서 나는이 코드로 Art Gallery에 속한 모든 이미지를 발견했습니다.

@image = Image.find_all_by_gallery("Art") 

이제 우리가 단지 @image.first을 사용할 수 @image 어레이의 첫 번째 요소를 표시하고, 우리는 캐 러셀의 활성 항목에서 어레이의 첫 번째 요소를 호출 할 수있다. 그런 다음 item 부분에 대해 이해해야 할 기본 사항은 배열의 모든 요소를 ​​직접 호출하고 표시하면 배열의 첫 번째 요소도이 부분에 표시된다는 것입니다. 그래서 반복이 일어날 수 있습니다. 이를 방지하기 위해 우리는 다음과 같이 수행 할 수 있습니다 첫 번째 요소는 회전 목마의 '항목'부분에 반복되지 않습니다
i = @image.count 
@image[1..i] 

그래야. 다른 사람들에게 도움이되기를 바랍니다. 시간을 주셔서 감사합니다. 다음과 같이

0

내가 먼저 each_with_index 필요하다고 생각하지만, 실제로, 당신은 Art 갤러리에서 이미지에만 관심이, 어떤 이야기가 첫 번째 이미지는 실제로 Art 이미지없는 경우, 그래서 시도 :

<div id="myCarousel" class="carousel slide"> 
    <div class="carousell-inner"> 
    <% art_images_counter = 0 %> 
    <% @img.each do |image|%> 
     <% if image.gallery == "Art" %> 
     <% if art_images_counter == 0 %> 
      <div class="active item"> 
      <%= image_tag (image.image.url) %> 
      </div> 
     <% else %> 
      <div class="item"> 
      <%= image_tag (image.image.url)%> 
      </div> 
     <% end %> 
     <% art_images_counter += 1 %> 
     <%end%> 
    <%end%> 
    </div> 
</div> 

희망이 도움이됩니다.

+0

그런 것은 아닙니다 .. !!! 갤러리 '아트'에 속한 이미지를 검색하는 '이미지'테이블과 같습니다. '갤러리 '는 이미지 테이블의 속성입니다. 그래서 제 견해로, 저는'Art' 갤러리에 속한 이미지들을 보여주는 새로운 뷰 페이지를 만들었습니다. 모든 갤러리에서 마찬가지입니다. –

+0

나는'twitter bootstrap 's Carousel'의 작업을 알고 있다고 가정하고 있습니다. 그러므로'class active item'은 배열의 첫 번째 요소를 보여주기위한 것입니다. 내 경우에는 어느 것이 든 아트 갤러리에 속하는 첫 번째 이미지가'클래스 액티브 아이템 '에 표시됩니다. 어쨌든 필자는 위의 코드 ive를 잘못 찾지 않았습니다. 그래서 그것을 이해할 수 있습니다. –

+0

내 대답은 다음과 같습니다. 모든 이미지를 반복하고 첫 번째 이미지를 갤러리의 첫 번째 항목에'gallery == 'Art'', 다른 항목에는 다른 모든 항목을 넣습니다. 그래서 imho이게 효과가있다. 이거 해봤 니? – nathanvda

관련 문제