2012-08-02 15 views
5

condicionales que tienen esta clase de cargadorversiones/proceso con Carrierwave

class ImageUploader < CarrierWave::Uploader::Base 

    include CarrierWave::RMagick 

    process :resize_to_limit => [300, 300] 

    version :thumb do 
    process :resize_to_limit => [50, 50] 
    end 

... 

que procesará el archivo original de 300x300 y guardar una versión pulgar.

¿Me gustaría poder hacer una versión pequeña/miniatura solo basada en un booleano en mi modelo?

Así lo hice

if :icon_only? 
process :resize_to_limit => [50, 50] 
else 
    process :resize_to_limit => [300, 300] 
end 

protected 

def icon_only? picture 
    model.icon_only? 
end 

Pero siempre terminaron en el procesamiento de 50x50. Incluso cuando me ha gustado esta

def icon_only? picture 
    false 
end 

podría recibir mi sintaxis todo mal con el, pero también intenté pedir

if icon_only? 

Lo que me dijeron que no había nombre del método como that.Im perdido. ..

Respuesta

3

Utilice un :if condicional, así:

process :resize_to_limit => [50, 50], :if => :icon_only? 
process :resize_to_limit => [300, 300], :if => ... 

no he hecho tri ed esto, pero está documentado in the code, por lo que debería funcionar.

+0

Tengo esta parte de trabajo proceso: resize_to_limit => [50, 50],: si =>: icon_only? proceso: resize_to_limit => [300, 300],: if =>!: Icon_only? Pero siempre crea la versión de pulgar incluso la declaración a menos versión: thumb,: unless =>: icon_only? version: thumb do proceso: resize_to_limit => [50, 50] end – Jepzen

+2

No creo ': if =>!: Icon_only?' Funcionará. Defina otra función ': not_icon_only?' O utilice un proceso proc: ': resize_to_limit => [300, 300],: if => Proc.new {! Icon_only? } ' ¿También estás seguro de que tu método 'icon_only?' Está funcionando realmente? Toma un argumento 'picture' pero luego llamas' icon_only? 'En' model'. –

+0

Bueno, parecía un desastre, así que terminé haciendo otra clase de cargadores solo para mi ícono. Mi icono solo? El método (en el modelo) no tomó el valor recién asignado también, solo va el valor predeterminado de la tabla, así que incluso si obtuve la lógica, no sé cómo podría determinar si solo debería ser un ícono o no. Gracias por tu ayuda. – Jepzen

2

Como señaló @shioyama, se puede usar: si para especificar la condición.

Sin embargo, hacer la condición inversa (por ejemplo, !icon_only?) requiere un poco de trabajo.

process :resize_to_limit => [300, 300], :if => Proc.new {|version, options| !version.send(:icon_only?, options[:file])} do 
Cuestiones relacionadas