Tengo un método before_save que llamo que cambia el nombre de una imagen cargada.Rieles: ¿Cómo ejecuto un before_save solo si se cumplen ciertas condiciones?
before_save :randomize_file_name
def randomize_file_name
extension = File.extname(screen_file_name).downcase
key = ActiveSupport::SecureRandom.hex(8)
self.screen.instance_write(:file_name, "#{key}#{extension}")
end
Ese método es parte de mi modelo Item
.
Eso funciona muy bien cuando creo un nuevo elemento o necesito actualizar la imagen asociada a un elemento ... pero el problema es que si necesito actualizar un elemento pero NO la imagen, el método randomize_file_name
aún se ejecuta y cambia el nombre del archivo en la base de datos (aunque no el archivo en sí, obviamente).
Así que, estoy pensando que necesito encontrar una manera de ejecutar solo randomize_file_name
si se incluye un archivo en el envío del formulario ... pero no estoy seguro de cómo hacerlo.
Documentación más detallada aquí: http://apidock.com/rails/ActiveRecord/Dirty –
Esto tampoco lo conseguirá. ¿Qué sucede si el usuario carga un nuevo archivo con el mismo nombre de archivo? En este caso, el nombre del archivo será el mismo, pero es posible que desee una clave diferente. –