2010-05-27 19 views
8

Ich benutze Büroklammer, um alle Arten von Dateien (Textdokumente, Binärdateien, Bilder) hochzuladen.Styles in Paperclip nur wenn es ein Bild ist [Schienen]

Ich möchte in meinem Modell setzen:

has_attached_file :attachment, :styles => { :medium => "300x300>", :thumb => "100x100>" } 

aber es hat die Stile auszuführen nur wenn es ein Bild ist. Ich habe versucht,

if :attachment_content_type =~ /^image/ 

hinzuzufügen, aber es hat nicht funktioniert.

Antwort

15

Sie können den Rückruf before_<attachment>_post_process verwenden, um die Thumbnail-Generierung für Nicht-Bilder zu stoppen. Wenn Sie im Rückruf false zurückgeben, werden keine Stile verwendet.

Siehe Rubrik "Veranstaltungen" in docs

before_attachment_post_process :allow_only_images 

    def allow_only_images 
    if !(attachment.content_type =~ %r{^(image|(x-)?application)/(x-png|pjpeg|jpeg|jpg|png|gif)$}) 
     return false 
    end 
    end 
3

Kann man so etwas wie dies muß sein:

:styles => lambda { |attachment| 
    !attachment.instance.image? ? {} : {:thumb => "80x24", :preview => "800x600>"} 
} 

Und definiert Methode in Ihrem Modell:

def image? 
    attachment.content_type.index("image/") == 0 
end 
1

können Sie verwenden auf Ihrem Modell

`has_attached_file :avatar, 
     :styles => lambda { |a| if a.content_type =~ %r{^(image|(x-)?application)/(x-png|pjpeg|jpeg|jpg|png|gif)$} 
          { 
          :thumb => "100x100#", 
          :medium => "300x300>", 

          } 
         else 
          Hash.new 
         end 
         },:default_url => "/missing.png"` 
Verwandte Themen