attachment_fu: No vuelva a cargar imágenes en miniatura
-
06-09-2019 - |
Pregunta
Tengo un pequeño "fotos" de clase que se adjunta imágenes. Cuando voy a la página de orden de clasificación de las fotos, itera aunque cada foto, establece el nuevo valor 'tipo', y lo guarda. Todo bien hasta ahora.
El problema es que me he dado cuenta que este comportamiento es bastante lento. Resulta que, attachment_fu vuelve a cargar la imagen en miniatura en cada salvar -. Independientemente de si hay o no nuevos datos de imagen para trabajar con
Es evidente que este sistema ha sido bien pensado y salida, así que estoy sólo ha dejado de asumir que existe una disposición de esta situación. ¿Cómo le digo attachment_fu no para regenerar las miniaturas cuando no es apropiado?
Gracias, - Matchu
Editar acabo de recordar que, para esta situación particular, puedo usar update_attribute de esquivar todas las validaciones y otras devoluciones de llamada. Sin embargo, esto no es realmente una solución viable para todo el escenario grande. ¿Qué me falta?
Solución
entró y hackeado attachment_fu un poco, y volvió a escribir el comportamiento save_attachment?
. Más o menos, he añadido algunas nuevas condiciones: además de un archivo temporal existente, una de la siguiente debe ser verdadera:
- No hay archivo para la imagen ya existe (con el atributo
full_filename
). - Los datos de imagen se actualiza de forma explícita usando el método
uploaded_data=
. - La imagen es una imagen en miniatura.
Se pasa los tres casos de prueba - nuevas cargas de fotos, imágenes de edición de fotos y edición de datos de fotos sin imagen - pero realmente no he probado esto en la naturaleza por el momento. Probablemente voy a tener que hacer algunas correcciones; vamos a ver qué pasa.
Otros consejos
El hilo sólo moderadamente útil que he visto sobre este tema está aquí:
http://groups.google.com/group/rubyonrails -Habla / browse_thread / hilo / 709d97e06b373786
Creo que la solución de Matchu es probablemente la correcta con una revisión rápida del código attachment_fu. Me encantaría que Matchu podría compartir un parche o un fragmento de su save_attachment modificado? método. Estoy a punto de cavar en esto por mi cuenta, ya que este se ha convertido en un problema para mí y probablemente será menos trabajo que reemplazar por completo attachment_fu ...
Actualizar
Con el contorno del Matchu, se me ocurrió una solución a corto (si es poco elegante) que parece funcionar después de la prueba de luz.
Me Modifed save_attachment? en attachment_fu / attachment_fu.rb:
def save_attachment?
return false unless (thumbnail || !full_filename || @active_upload) #added
File.file?(temp_path.to_s)
end
... para comprobar las condiciones Matchu establecidos. No podía subir con una manera elegante de decir si los datos se han pasado a lo largo de la uploaded_data = método de selección (si alguien tiene una mejor manera de hacer esto, soy todo oídos; Todavía estoy un rubí / carriles novato ) por lo que también añadió una línea para uploaded_data = para establecer el @active_upload variable global:
def uploaded_data=(file_data)
return nil if file_data.nil? || file_data.size == 0
self.content_type = file_data.content_type
self.filename = file_data.original_filename if respond_to?(:filename)
@active_upload=true # added
if file_data.is_a?(StringIO)
file_data.rewind
self.temp_data = file_data.read
else
self.temp_path = file_data
end
end
Esperamos que ayuda, y si alguien tiene una forma más elegante de manejar lo que hice allí con la variable global, me encantaría escucharlo.