Disseny6
Disseny6
Llancaport
Girodansa
Fotocarreras
Carrigan

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 - about 1 month ago | Ruby on Rails | 3 comentarios

Comentarios

gpsxfqhzl:

AqQNxl <a href="http://bgqerofbchoe.com/">bgqerofbchoe</a>, [url=http://ljaefqauqaig.com/]ljaefqauqaig[/url], [link=http://gkcivrxxxgky.com/]gkcivrxxxgky[/link], http://fkdgoijqkenc.com/

myunddv:

r2H57a <a href="http://knuitqxjocbj.com/">knuitqxjocbj</a>, [url=http://jrhhvmexstko.com/]jrhhvmexstko[/url], [link=http://jkyniwgrzuex.com/]jkyniwgrzuex[/link], http://segvffkaxwwo.com/

Epiliator:

Избавление от лишних волос - задача стратегическая. <b>- Кому проще эпилироваться - брюнеткам или блондинкам?</b> Брюнеткам сложнее - у них волос больше. Блондинкам не подойдет лазерная и фотоэпиляция, она не удаляет светлые волосы, более того, при светлой коже могут быть ожоги. Электроэпиляция подойдет всем, но она требует много времени, так как за сеанс обрабатываются небольшие участки тела. Самый безобидный и простой способ для всех - биоэпиляция воском. <b>- Кому это противопоказано?</b> Если волосы плохо отросли, очень короткие, то эпиляция не делается. Есть еще ряд противопоказаний, например близкое расположение сосудов, повреждения и болезни кожи. Для фотоэпиляции перечень противопоказаний очень широк: псориаз, сахарный диабет, экзема, гипертония и другие болезни. В уважающем себя салоне есть квалифицированный врач-дерматолог-косметолог, только его рекомендации помогут подобрать подходящий вам способ эпиляции. <b>- Как избежать боли?</b> Самые болезненные зоны - бикини, внутренняя поверхность бедра, подмышки, носогубный треугольник. Но чем чаще женщина делает эпиляцию, тем она менее чувствительна. Наиболее благоприятный период для эпиляции - середина менструального цикла, то есть время овуляции. Удаляя волосы в этот период, вы замедляете скорость их роста на 30-40%. - Скоро ли заживают красные точки на ногах после электроэпиляции? В среднем на это требуется месяц. После биоэпиляции может появиться раздражение. Оно длится около недели, можно лечить его пенкой депантенон. Эпиляцию не стоит делать в разгар сезона, чтобы не проходить потом все лето в брюках. Читать полностью: <a href=http://www.forsfortuna.com/health/270-shelkovaja-doroga.html>Шёлковая дорога</a>

Deja tu comentario




AVISO

Todos los campos de éste formulario son obligatorios

Este formulario no admite enlaces ni etiquetas HTML, no te molestes en intentarlo. ;-)