2012-12-12 52 views
0

我米使用轉盤來顯示圖像。我已經將這些圖像上傳到了雲端。但不知何故,它正在自我重複。 這裏是我的代碼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> 

我想是在active item它應該顯示的圖像陣列的第一個網址,並在非活動項目(這會是以後有效)應具備的其他圖像。它不應該重複圖像。由於i的值沒有變化,因此它重複該圖像。

+0

嘗試修剪下來的代碼。 'each_with_index'肯定能正常工作。該錯誤必須在您的使用中。但是,所有這些無關的噪音都很難看出來。 –

+0

<%@ img.each_with_index做| I,J |%>'你part' <%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代碼告訴顯示屬於美術館的所有圖像都應顯示在活動部分中。所以再次將所有圖像顯示在一個堆棧中,如圖案。順便問一下,你知道旋轉木馬是如何工作的嗎? –

+0

在div的項目中,它應該增加i的值,這樣當活動部分轉移到另一個項目時,它將顯示另一個圖像。 –

0

香港專業教育學院發現,通過做手工的答案。首先在控制器中我找到了這個代碼所有屬於Art Gallery的圖像。

@image = Image.find_all_by_gallery("Art") 

現在來顯示陣列@image的第一個元素,我們可以使用簡單地@image.first,然後我們可以調用該陣列的該第一元件在轉盤的活動項目。那麼對於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

這不是那個.. !!!就像我從表格'圖像'中搜索屬於畫廊'藝術'的圖像。 'Gallery'是圖像表的一個屬性。所以在我看來,我創建了一個新的視圖頁面,其中顯示屬於「藝術」畫廊的那些圖像。對於所有的畫廊也是如此。 –

+0

我假設你知道'twitter bootstrap's Carousel'的工作。因此,「類活動項目」用於顯示數組中的第一個元素。在我的情況下,屬於藝術畫廊的第一個圖像將顯示在「課程活動項目」中。無論如何,我沒有發現上面寫的code iive有任何問題。所以你可以從中理解。 –

+0

我的答案是:循環播放所有圖像,並將第一張圖像放在卡羅素的第一個項目中的gallery =='Art''中,其他所有項目放在其中。所以,這應該只是工作。你試過這個嗎? – nathanvda