Carriles + libélula joya: la imagen Guardar en una estructura de directorio basado en atributos de los objetos ActiveRecord

StackOverflow https://stackoverflow.com/questions/2705020

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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top