2013-04-17 7 views
6

Ich verwende Büroklammer, um mehrere Bilder hochzuladen. Ich benutze auch Active Admin. Bis jetzt war ich in der Lage, mehrere Bilder hochzuladen und sie meinem "Produkt" -Modell zuzuordnen. Ich bin auch in der Lage, die "Namen" aller verbundenen Bilder in der Indexseite anzuzeigen. Allerdings kann ich nicht herausfinden, wie zu Anzeige 'alle' Bilder (nicht nur Namen) auf meiner Show-Seite des Produktmodells. Bitte finden Sie den Code unten.Wie mehrere Bilder in ActiveAdmin angezeigt werden

\ app \ models \ product.rb

has_many :images, :dependent => :destroy 
accepts_nested_attributes_for :images, :allow_destroy => true 

\ app \ models \ image.rb

belongs_to :product 
has_attached_file :image, :styles => { 
    :thumb=> "100x100>", 
    :small => "300x300>", 
    :large => "600x600>" 
    } 

\ app \ admin \ products.rb

index do 
    column "Images" do |product| 
    product.images.map(&:image_file_name).join("<br />").html_safe 
    end 
end 

show do |product| 
    attributes_table do 
    row "Images" do 
     ul do 
     li do 
      image_tag(product.images.first.image.url(:small)) 
     end 
     li do 
      image_tag(product.images.second.image.url(:small)) 
     end 
     li do 
      image_tag(product.images.last.image.url(:small)) 
     end 
     end 
    end 
    end 
end 

I habe etwas gefunden, das funktioniert, aber das ist wirklich schlechte Programmierung. Ich habe derzeit 3 ​​Bilder zu jedem Produkt und ich verwende den obigen Code in meinem Showblock. Bitte schlagen Sie einen besseren Weg vor, dies zu tun.

+0

Ich habe den Code so geändert, dass das Bild nur angezeigt wird, wenn es vorhanden ist. 'image_tag (product.images.first.image.url (: small)) if! product.images.first.nil?' Dieser Code hat jedoch immer noch eine Begrenzung von max. 3 Bilder. Bitte beraten Sie, wie Sie dies besser erreichen können. – ansh0809

+0

meinst du, du musst jedes bild nicht nur 3 von ihnen anzeigen? – Fivell

Antwort

12

meinst du, du musst jedes Bild anzeigen, nicht nur 3 davon? Wenn ja, versuchen Sie zu

row "Images" do 
    ul do 
    product.images.each do |img| 
     li do 
     image_tag(img.image.url(:small)) 
     end 
    end 
    end 
end 
+0

Vielen Dank ... Das funktioniert. Gibt es jedoch einen Weg, wo ich das erste Bild anzeigen kann als: klein und der Rest als: Daumen? – ansh0809

+0

Ja, zuerst das erste Bild anzeigen als Offset (1) verwenden und Zyklus verwenden – Fivell