Rails + petit bijou Dragonfly: Enregistrement de l'image dans une structure de répertoire en fonction des attributs de l'objet ActiveRecord
-
01-10-2019 - |
Question
J'utilise libellule pierre précieuse pour gérer les images et les pièces jointes dans mon application rails et je dois de stocker des images dans une structure de répertoire spécifique en fonction de mon
modèle utilisateur.
laissez » dire que j'ai modèle utilisateur qui a un nom et chaque utilisateur a beaucoup
albums qui ont un nom aussi, alors je veux que les images soient stockées
dans "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"
J'ai réussi à changer la root_path dans la mouche de dragon et moi même relative_storage_path overrided comme ceci:
class MyDataStore < Dragonfly::DataStorage::FileDataStore
private
def relative_storage_path(suffix)
"#{suffix}"
end
end
mais, je ne sais pas comment je peux passer l'objet ActiveRecord
attributs comme user.name
et user.album.name
à relative_storage_path
pour créer mon parcours idéal.
Avez-vous une idée de comment je peux faire une telle chose?
La solution
Mark Evans l'auteur gem m'a fait une faveur et a répondu à cette question sur le groupe Google. Voici sa réponse qui a fonctionné assez bien pour mon cas:
Salut à
Vous ne pouvez pas le faire hors de la boîte, parce que le magasin de données délibérément conçu pour être très simple - vous passez dans les données, il donne vous sauvegardez un uid, etc.
Si vous voulez le faire, vous aurez à la pièce jointe singe-patch # sauver! comme donc:
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
La seule chose que j'ai changé ci-dessus est que datastore.store prend deux args maintenant.
Vous devrez alors modifier / singe-patch Dragonfly :: DataStorage :: FileDataStore # magasin pour tenir compte de la deuxième arg.
Hors intérêt, pourquoi voulez-vous que les images soient stockées dans ce format?
Vive Mark