2012-09-30 6 views
6

Ich verwende die folgenden:Wie wird der Büroklammerstil nur eingestellt, wenn der Inhaltstyp Bild ist?

has_attached_file :file,:styles => { :thumbnail => '320x240!'},:url => "/images/:attachment/:id/:style/:basename.:extension",:path => ":rails_root/public/images/:attachment/:id/:style/:basename.:extension" 

validates_attachment_content_type :file, :content_type => [ 'image/gif', 'image/png', 'image/x-png', 'image/jpeg', 'image/pjpeg', 'image/jpg' ] 

Um beide Bilder und Videos hochladen. Wenn ich :style =>{} verwende, wird das Bild nicht hochgeladen. Ich möchte die Methode :style nur verwenden, wenn der Inhaltstyp der Datei ein Bild ist.

+1

sollten Sie verwenden before_post_process https://github.com/thoughtbot/paperclip#events –

Antwort

5

können Sie Bedingung verwenden innerhalb von Lambda, sorry über hässliche Formatierung:

has_attached_file :file, :styles => lambda 
{ |a| 
     if a.instance.is_image? 
     {:thumbnail => "320x240!"} 
     end 
} 


def is_image? 
    return false unless asset.content_type 
    ['image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', 'image/x-png', 'image/jpg'].include?(asset.content_type) 
end 
+0

Für 'is_image' vielleicht' (asset.content_type || "") .split ("/"). first == 'image''. Oder einfach: '/ image \ //. Match (asset.content_type)'. – tokland

+0

Dies ist genau das, was ich gesucht habe, danke! – wbucko

2

-Update 2016:

meisten upvoted Antwort noch funktioniert, aber Sie müssen eine leere Hash zurück, wenn es nicht von der ist erwarteter Typ (z. B. eine PDF-Datei, die Sie nicht anstelle eines Bildes verarbeiten möchten), andernfalls werden Sie auf TypeError - can't dup NilClass Probleme stoßen.

Probe ein ternäres für Prägnanz mit:

has_attached_file :file, :styles => lambda { |a| a.instance.is_image? ? {:thumbnail => "320x240!"} : {} } 
Verwandte Themen