me encontré con esto, y parece que un ejemplo de cómo resolver este problema: https://gist.github.com/995663.
El cargador se carga primero cuando llama al mount_uploader
, punto en el que cosas como if image?
o elsif video?
no funcionarán, porque todavía no hay archivos para cargar definidos. Necesitarás los métodos a los que se llama cuando se crea una instancia de la clase.
Lo que el enlace que he dado anterior, es reescribir el método process
, de modo que tome una lista de extensiones de archivos y procesos sólo si el archivo coincide con una de esas extensiones
# create a new "process_extensions" method. It is like "process", except
# it takes an array of extensions as the first parameter, and registers
# a trampoline method which checks the extension before invocation
def self.process_extensions(*args)
extensions = args.shift
args.each do |arg|
if arg.is_a?(Hash)
arg.each do |method, args|
processors.push([:process_trampoline, [extensions, method, args]])
end
else
processors.push([:process_trampoline, [extensions, arg, []]])
end
end
end
# our trampoline method which only performs processing if the extension matches
def process_trampoline(extensions, method, args)
extension = File.extname(original_filename).downcase
extension = extension[1..-1] if extension[0,1] == '.'
self.send(method, *args) if extensions.include?(extension)
end
A continuación, puede utilizar esto para llamar a lo que solía ser procesar
IMAGE_EXTENSIONS = %w(jpg jpeg gif png)
DOCUMENT_EXTENSIONS = %(exe pdf doc docm xls)
def extension_white_list
IMAGE_EXTENSIONS + DOCUMENT_EXTENSIONS
end
process_extensions IMAGE_EXTENSIONS, :resize_to_fit => [1024, 768]
para las versiones, hay una página en el wiki carrierwave que le permite condicionalmente versiones de proceso, si se encuentra en> 0.5.4. https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Do-conditional-processing. Vas a tener que cambiar el código de la versión a tener este aspecto:
version :big, :if => :image? do
process :resize_to_limit => [160, 100]
end
protected
def image?(new_file)
new_file.content_type.include? 'image'
end
pude probarlo ... Voy a actualizar mi respuesta – keithepley
Otra actualización ... descubierto la manera de cuidar de forma selectiva creando versiones – keithepley
¡Impresionante! ¡Gracias! – manzhikov