Creo que tengo un problema de huevo y pollo. Me gustaría establecer el content_type de un archivo cargado a través de Paperclip. El problema es que el content_type predeterminado solo se basa en la extensión, pero me gustaría basarlo en otro módulo.Reemplazando content_type para Rails Paperclip plugin
que parecen ser capaz de establecer el content_type con el before_post_process
class Upload < ActiveRecord::Base
has_attached_file :upload
before_post_process :foo
def foo
logger.debug "Changing content_type"
#This works
self.upload.instance_write(:content_type,"foobar")
# This fails because the file does not actually exist yet
self.upload.instance_write(:content_type,file_type(self.upload.path)
end
# Returns the filetype based on file command (assume it works)
def file_type(path)
return `file -ib '#{path}'`.split(/;/)[0]
end
end
... Pero no puedo basar el tipo de contenido en el archivo porque Paperclip no escribe el archivo hasta after_create.
Y me parece que no puede establecer la content_type después de que se ha guardado o con la devolución de llamada after_create (incluso de vuelta en el controlador)
así que me gustaría saber si de alguna manera puedo obtener acceso al objeto real del archivo (supongamos que no hay procesadores haciendo nada en el archivo original) antes de que se guarde, de modo que pueda ejecutar el comando file_type en eso. ¿O hay una manera de modificar el content_type después de que se hayan creado los objetos?
Para llegar a la tempfile era exactamente lo que necesitaba. También lo cambié de 'before_post_process' a' before_save' – Fotios