Rails + Dragonfly Gem:ActiverCordオブジェクト属性に基づいてディレクトリ構造で画像を保存する
-
01-10-2019 - |
質問
私は使用しています ドラゴンフライジェム Railsアプリで画像と添付ファイルを管理するには、ユーザーモデルに基づいて特定のディレクトリ構造に画像を保存する必要があります。名前が付いているユーザーモデルがあり、各ユーザーには多くのアルバムがあるとしましょう。 "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"
ドラゴンフライのroot_pathを変更することができました。
class MyDataStore < Dragonfly::DataStorage::FileDataStore
private
def relative_storage_path(suffix)
"#{suffix}"
end
end
しかし、それでも、ActiverCordオブジェクト属性をどのように渡すことができるかわかりません user.name
と user.album.name
に relative_storage_path
私の理想的な道を作るために。
私がそのようなことをする方法は何か考えがありますか?
解決
GEMの著者であるマーク・エヴァンスは私に好意を与え、Google Groupでこの質問に答えました。これが私のケースのためにかなりうまくいった彼の答えです:
やあ
データストアは非常にシンプルになるように意図的に設計されているため、これを箱から出してはできません。データを渡すと、UIDなどが戻ってきます。
あなたがそれをしたいなら、あなたはモンキー・パッチの添付ファイル#を保存する必要があります!そのようです:
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
私が上で変更した唯一のことは、DataStore.storeが2つのargsを取得したことです。
その後、2番目のargを考慮に入れるには、DataStorage :: filedatastore :: dataStorage :: dataStorage :: dataStorageを変更する必要があります。
興味深いことに、なぜ画像をその形式で保存したいのですか?
乾杯マーク