Rails + Dragonfly gemma: Salvataggio di un'immagine in una struttura di directory in base agli attributi degli oggetti ActiveRecord

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

Domanda

libellula gemma per gestire le immagini e gli allegati nella mia applicazione Rails e ho bisogno di memorizzano le immagini in una struttura di directory specifica in base alla mia modello di utente. let' dire che ho modello di utente che ha un nome e ogni utente ha molti album, che hanno un nome anche, allora voglio le immagini da archiviare in "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"

sono riuscito a cambiare il root_path in Dragon Fly e ho anche relative_storage_path overrided in questo modo:

class MyDataStore < Dragonfly::DataStorage::FileDataStore
  private
   def relative_storage_path(suffix)
    "#{suffix}"
   end
end

, ma ancora, non so come posso passare l'oggetto ActiveRecord attributi come user.name e user.album.name a relative_storage_path per creare il mio percorso ideale.

Non hai idea di come posso fare una cosa simile?

È stato utile?

Soluzione

Mark Evans autore gemma mi ha fatto un favore e ha risposto a questa domanda sul gruppo Google. Ecco la sua risposta che ha funzionato abbastanza bene per il mio caso:

Ciao

Non si può fare questo, fuori dalla scatola, perché l'archivio dati è volutamente progettato per essere molto semplice - si passa nei dati, dà di eseguire un UID, ecc.

Se si vuole farlo dovrete scimmia-patch Allegato # risparmia! piace così:

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

L'unica cosa che ho cambiato sopra è che datastore.store prende due args ora.

Avrai quindi di modificare / scimmia-patch Libellula :: :: DataStorage FileDataStore # negozio per prendere in considerazione la secondo arg.

Fuori di interesse, perché si desidera che le immagini da archiviare in quel Formato?

Saluti Mark

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top