Ruby on Rails y Attachment_fu. Puliendo pequeños detalles
Vamos a tratar de solucionar un pequeño problema con Attachment_fu. I es que si no validamos la presencia de un archivo a subir des del modelo, obtendremos un error a la hora de eliminar o modificar registros sin archivos asociados. Puede que no sea obligatòrio subir un pdf a nuestra aplicación, pero que queramos ofrecer la posibilidad. En ese caso no podemos validar la presencia del "attachment" des del modelo.
Pues bien, cuando tratamos de eliminar/editar un registro que no tiene asociado un archivo y estamos usando attachment_fu en el modelo no podremos hacerlo y nos aparecerá el error:
can't convert nil into String
Lo curioso es que no tendremos problema a la hora de crear el registro, pero sí cuándo queramos eliminar o editar ese registro.
Para solucionar el problema haremos unos pequeños cambios en el código del plugin:
Buscaremos el archivo "attachment_fu.rb" dentro de la carpeta del plugin y hacemos los siguientes cambios:
ELIMINAMOS:
def save_attachment?
File.file?(temp_path.to_s)
end
AÑADIMOS EN SU LUGAR:
def save_attachment?
if temp_path
return File.file?(temp_path.to_s)
else
return false
end
end
MODIFICAMOS LA ACCIÓN "temp_path" de la siguiente forma:
def temp_path
return nil if temp_paths.empty?
p = temp_paths.first
p.respond_to?(:path) ? p.path : p.to_s
end
BUSCAMOS LA ACCIÓN "temp_paths" (Justo después de la anterior)
ELIMINAMOS:
temp_paths ||= (new_record? || !File.exist?(full_filename)) ? [] : [copy_to_temp_file(full_filename)]
Y PONEMOS EN SU LUGAR:
@temp_paths ||= (new_record? || filename.blank? || !File.exist?(full_filename)) ? [] : [copy_to_temp_file(full_filename)]
Ahora buscamos el archivo "file_system_backend.rb" en la carpeta del plugin y dejamos la acción "full_filename" de la siguiente forma:
def full_filename(thumbnail = nil)
return nil if thumbnail_name_for(thumbnail).blank?
file_system_path = (thumbnail ? thumbnail_class : self).attachment_options[:path_prefix].to_s
File.join(RAILS_ROOT, file_system_path, *partitioned_path(thumbnail_name_for(thumbnail)))
end
Bien, eso es todo. Ya podemos eliminar y modificar registros de attachment_fu a los que no hemos asociado ningun archivo usando el plugin.
También os dejo un par de enlaces (con RMagick , mini-magick) sobre cómo modificar el plugin para que recorte los imágenes en lugar de "deformarlas" en los thumbnails.
David - 9 months ago | Ruby on Rails | 7 comentarios
Deja tu comentario







Comentarios