2014-06-26 45 views
2

我有一個Ruby on Rails應用程序,允許用戶保存多達6個圖像,然後可以在傳送帶中查看。如何將圖像放入數組Ruby on Rails

圖像被保存爲字符串,如image,image_2,image_3,image_4,image_5,image_6。

我想寫一個'for'循環來顯示我的傳送帶中的所有圖像。

將所有這些圖像字符串組合成一個數組,然後將它們循環傳輸並通過傳送帶輸出的最佳方法是什麼?

更多詳情

我現在呼籲像下面這些作品,但不是特別乾燥的圖像。

<div style="position:relative"> 
    <div id="home-carousel" class="carousel"> 
    <div class="carousel-inner"> 

     <div class="item active"> 
     <%= image_tag @place.image %> 
     </div> 

     <% if @place.image_2.present? %> 
     <div class="item"> 
      <%= image_tag @place.image_2 %> 
     </div> 
     <% end %> 

     <% if @place.image_3.present? %> 
     <div class="item"> 
      <%= image_tag @place.image_3 %> 
     </div> 
     <% end %> 

     <% if @place.image_4.present? %> 
     <div class="item"> 
      <%= image_tag @place.image_4 %> 
     </div> 
     <% end %> 

     <% if @place.image_5.present? %> 
     <div class="item"> 
      <%= image_tag @place.image_5 %> 
     </div> 
     <% end %> 

     <% if @place.image_6.present? %> 
     <div class="item"> 
      <%= image_tag @place.image_6 %> 
     </div> 
     <% end %> 

    </div> 
    </div> 
</div> 

我希望能夠把我有什麼下面爲簡單的for循環,將通過每6個圖像對象,並返回在那裏的人。更多的東西是這樣的:

<div style="position:relative"> 
    <div id="home-carousel" class="carousel"> 
    <div class="carousel-inner"> 
     <% @place.images.each do |image| %> 
     <div class="item"> 
      <%= image_tag image %> 
     </div> 
     <% end %> 
    </div> 
    </div> 
</div> 
+1

向我們展示上下文和嘗試的內容 – mdesantis

+0

當您提到圖片「字符串」時,您的意思是什麼?你是說他們的本地化路徑? –

回答

1

的情況簡單的解決方案是添加一個幫助程序。因此,在helpers/places_helper.rb

module PlacesHelper 

    def get_carrousel_images(place) 
    [ 
     @place.image_1, 
     @place.image_2, 
     @place.image_3, 
     @place.image_4, 
     @place.image_5, 
     @place.image_6 
    ].select {|img| img.present? } 
    end 

,然後你可以寫在你的看法如下:

<div style="position:relative"> 
    <div id="home-carousel" class="carousel"> 
    <div class="carousel-inner"> 
     <% get_carrousel_images(@place).each do |image| %> 
     <div class="item"> 
      <%= image_tag image %> 
     </div> 
     <% end %> 
    </div> 
    </div> 
</div> 

現在具有地方6個image_x領域看起來有點臭,所以我寧願一個嵌套的模型,而不是正如Rich Peck所建議的那樣,儘管我知道有6個字段比較容易開始。

+0

感謝您的幫助Nathanvda這似乎工作,只要總是有6個圖像。當它缺少圖像時,它會返回'src =「/ assets」',這意味着根本不顯示任何圖像。任何想法如何我可以處理,如果圖像對象是空白的? –

+0

我做'compact',它應該刪除nils。如果沒有圖像,是'image_x'零還是一個空字符串? – nathanvda

+0

啊,我的不好,他們正在通過尼爾斯,它是刪除他們不存在的地方。似乎現在工作:) –

0

圖片

這都將取決於你如何設置的分貝images,和你想如何顯示它們在視圖中

如果您在User模型中的圖像,你可以打電話給他們這樣的:

app/controllers/users_controller.rb 
Class UsersController < ApplicationController 
    def show 
     @user = User.find params[:id] 
     @images = @user.images 
    end 
end 

這是obvi ously非常廣義的 - 我建議你張貼一些情況下你的問題,所以我們知道你具體

問什麼 -

回形針

如果您使用PaperclipCarrierwave,您基本上會將圖像附加到數據庫中的各種對象。例如,您將有以下幾點:

#app/models/image.rb 
Class Image < ActiveRecord::Base 
    has_attached_file :attachment 
end 

這使您可以撥打:

@images = Image.all 
@images.each do |image| 
    image.attachment.url #-> image URL 
end 

這是處理在Rails的圖像/附件的標準方法,因爲它直接關係到ActiveRecord。返回一列image路徑因此將是一個調用Model.allModel.where

+0

感謝您的回覆豐富!我在上面添加了一些進一步的解釋。此實例中的圖像使用載波寶石保存在Place模型中。希望我上面的額外信息將使事情更清楚:) –