Carriles + libélula joya: la imagen Guardar en una estructura de directorio basado en atributos de los objetos ActiveRecord
-
01-10-2019 - |
Pregunta
Estoy usando libélula joya para gestionar imágenes y archivos adjuntos en mi aplicación rieles y necesito almacenar imágenes en una estructura de directorios específica en base a mi
modelo de usuario.
vamos a decir que tengo modelo de usuario que tiene un nombre y cada usuario tiene muchas
álbumes, que tienen un nombre también, entonces yo quiero que las imágenes se almacenan
en "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"
he conseguido cambiado la root_path en mosca dragón y que incluso relative_storage_path overrided como esto:
class MyDataStore < Dragonfly::DataStorage::FileDataStore
private
def relative_storage_path(suffix)
"#{suffix}"
end
end
Pero aún así, no sé cómo puedo pasar el objeto ActiveRecord
atributos como user.name
y user.album.name
a relative_storage_path
para crear mi camino ideal.
¿tiene alguna idea de cómo puedo hacer tal cosa?
Solución
Mark Evans autor joya me hizo un favor y respondió a esta pregunta en el grupo de Google. He aquí su respuesta que funcionó bastante bien para mi caso:
Hola
No se puede hacer esto fuera de la caja, porque el almacén de datos es a propósito diseñado para ser muy simple - se pasa en los datos, que da hacer una copia de un fluido, etc.
Si quiere hacerlo tendrá que mono-parche de acoplamiento # alojamientos me gusta así:
class Dragonfly::ActiveRecordExtensions::Attachment
def save!
destroy! if uid_changed?
self.uid = app.datastore.store(temp_object, parent_model) if has_data_to_store?
end
end
Lo único que he cambiado es que por encima de datastore.store necesitan dos args ahora.
A continuación, tendrá que modificar / mono-parche Libélula :: :: DataStorage FileDataStore # tienda para tener en cuenta la segundo arg.
Como curiosidad, ¿por qué quiere que las imágenes se almacenan en ese formato?
Saludos Marcos