Rails + Dragonfly gemma: Salvataggio di un'immagine in una struttura di directory in base agli attributi degli oggetti ActiveRecord
-
01-10-2019 - |
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?
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