Rails + Dragonfly gem: in einer Verzeichnisstruktur Speichern Bild basierend auf Activeobjektattribute
-
01-10-2019 - |
Frage
Ich bin mit Libelle gem Bilder und Anhänge in meiner Rails-Anwendung zu verwalten, und ich muß speichern von Bildern in einer bestimmten Verzeichnisstruktur basiert auf meiner
Benutzermodell.
lassen Sie uns sagen, dass ich Benutzermodell haben, die einen Namen hat und jeder Benutzer hat viele
Alben, die einen Namen auch haben, dann möchte ich die Bilder gespeichert werden
in "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"
Ich habe geändert den root_path in Drachen fliegen geschafft und ich selbst overrided relative_storage_path wie folgt aus:
class MyDataStore < Dragonfly::DataStorage::FileDataStore
private
def relative_storage_path(suffix)
"#{suffix}"
end
end
aber immer noch, ich weiß nicht, wie ich das Active Objekt passieren kann
Attribute wie user.name
und user.album.name
zu relative_storage_path
meinen idealen Weg zu schaffen.
Sie haben keine Ahnung, wie ich so etwas tun kann?
Lösung
Mark Evans der Edelstein Autor hat mir einen Gefallen und beantwortet diese Frage auf Google-Gruppe. Hier ist seine Antwort, die ziemlich gut für meinen Fall gearbeitet:
Hallo zusammen
Sie können diese aus der Box nicht, weil der Datenspeicher ist gezielt entwickelt, um sehr einfach zu sein - Sie in Daten übergeben, gibt es Sie sichern eine uid, etc.
Wenn Sie es möchten Sie Affe-Patch-Anlage # haben sparen! mögen so:
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
Das einzige, was ich oben geändert habe ist, dass datastore.store zwei Takes args jetzt.
Sie werden dann ändern müssen / Affe-Patch Libelle :: Datastorage :: FileDataStor # store Rechnung zu tragen, in denen Zweites Argument.
Aus Interesse, warum wollen Sie die Bilder in gespeichert werden, dass Format?
Prost Mark