2010-05-27 7 views
8

Estoy usando paperclip para cargar todo tipo de archivos (documentos de texto, binarios, imágenes).Estilos en Paperclip solo si es una imagen [rieles]

me gustaría poner esto en mi modelo:

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

pero tiene que llevar a cabo los estilos única si se trata de una imagen. Intenté agregar

if :attachment_content_type =~ /^image/ 

pero no funcionó.

Respuesta

15

Puede usar la devolución de llamada before_<attachment>_post_process para detener la generación de miniaturas para imágenes que no sean imágenes. Si devuelve false en devolución de llamada, no habrá intentos de usar estilos. sección

Ver "Eventos" en 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

Puede ser que necesite algo como esto:

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

y definir el método en su modelo:

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

Usted puede utilizar en su modelo

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