2011-09-23 3 views
0

여러 클립 이미지를 업로드하는 데 Paperclip을 사용하고 있습니다. 나는이 튜토리얼의 일부 http://sleekd.com/general/adding-multiple-images-to-a-rails-model-with-paperclip/ 내 모델은 다음 : 내 문제가 ItemImage.rb클립에 여러 중첩 이미지를 사용할 때 기본 사진

class ItemImage < ActiveRecord::Base 
belongs_to :item 
belongs_to :user 
#for image. Paperclip  following Bootstrap sizes. 
has_attached_file :image, 
       :styles => { :large => ["330x230>",:png], :medium => ["210x150>",:png], :small => ["90x90>",:png], :thumb => ["32x32>", :png] }, 
       :default_url => '/images/missing_image_:style.png', 
       :storage => :s3, 
       :bucket => 'iscomp', 
       :s3_credentials => "#{RAILS_ROOT}/config/amazon_s3.yml", 
       :path => "iscomp/:attachment/:style/:id.:extension" 
validates_attachment_presence :image 
validates_attachment_size :image, :less_than => 5.megabytes 
end 

Item.rb에게

has_many :item_images, :dependent => :destroy 
accepts_nested_attributes_for :item_images, :reject_if => lambda { |l| l['item_image'].nil? } 

을 그 이미지가 두 번째 모델에 저장되기 때문에, @ item.item_image에 이미지/레코드가 없으면 기본 빈 이미지에 액세스 할 수 없습니다. 종이 클립을 @item에 직접 사용했다면, Paperclip은 나를위한 기본 이미지를 반환 할 것입니다.

썸네일을 호출 할 때마다 if/unless 문을 계속 추가하고 싶지 않은 경우 가장 좋은 방법은 무엇입니까?

답변

0

: 다음 각 항목에 ItemImages의 숫자를 연결합니다 마이그레이션

def self.up 
    add_column :item, :itemimage_count, :integer, :default => 0 

Item.reset_column_information 
    Item.all.each do |item| 
    item.update_attribute :itemimage_count, item.itemimages.length 
    end 
end 

def self.down 
    remove_column :item, :itemimage_count 
end 
end 

이에 itemimage_count 추가

합니다. 보기, 컨트롤러 및 모델에서이 카운터에 액세스 할 수 있습니다.

귀엽게하고 싶다면 모델에 스코프 조건을 설정하면됩니다.

단순히를 호출 이미지를 표시 할 때마다 Item.rb

scope :list, :conditions => ["itemimages_count >= 0"] 

Item_controller이

@itemimages = Item.list 

내가 개인적으로, 다른 if 문 1 개 세트로 귀하의 의견에 일부를 만들 것 부분.

if Item.itemimages_count == 0 
    #show this image 
end 
#code that displays an Item's image 
    #show the image in itemimages 

이 정보가 도움이되기를 바랍니다.

0

우아한 방법을 찾고 있다면 잘 모르겠지만 기본 이미지를 만드는 방법과 @ item.item_image가 공백을 반환하면 기본 빈 이미지가 표시됩니다. 클립 클립을 사용하지 않았습니다.

당신은에 의해이 문제를 해결할 수 있습니다
+0

그 방법입니다. 나는 그것을 밖으로 시도하고 더 나은 옵션이 있는지 계속 볼 것입니다 – Julien

관련 문제