2010-05-27 3 views
8

Uso la graffetta per caricare tutti i tipi di file (documenti di testo, file binari, immagini).Stili in Graffetta solo se si tratta di un'immagine [rotaie]

mi piacerebbe mettere questo nel mio modello:

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

ma deve eseguire gli stili solo se si tratta di un'immagine. Ho provato ad aggiungere

if :attachment_content_type =~ /^image/ 

ma non ha funzionato.

risposta

15

È possibile utilizzare la richiamata before_<attachment>_post_process per interrompere la generazione di miniature per le non immagini. Se si restituisce false in callback, non ci saranno tentativi di utilizzare gli stili. sezione

Vedere "Eventi" 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

Può essere avete bisogno di qualcosa di simile:

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

e definire il metodo nel modello:

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

È possibile utilizzare sul tuo modello

`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"`