1

Railsアプリで画像と添付ファイルを管理するためにトンボの宝石を使用しています。ユーザーモデルに基づいて特定のディレクトリ構造に画像を保存する必要があります。たとえば、名前のあるユーザーモデルがあり、各ユーザーに名前のあるアルバムが多数ある場合、画像をに保存する必要があります。 "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"

トンボのroot_pathを変更し、次のようにrelative_storage_pathをオーバーライドしました。

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

それでも、理想的なパスを作成するために、のようuser.nameなActiveRecordオブジェクト属性を渡す方法がわかりません。user.album.namerelative_storage_path

どうすればそんなことができるのか分かりますか?

4

1 に答える 1

5

宝石の作者であるマーク・エバンスは私に好意を示し、グーグルグループでこの質問に答えました。これが私の場合にかなりうまくいった彼の答えです:

やあ

データストアは非常に単純になるように意図的に設計されているため、これをそのままでは実行できません。データを渡したり、uidを返したりします。

やりたい場合は、Attachment#saveにモンキーパッチを適用する必要があります。そのようです:

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つの引数を取ることだけです。

次に、2番目の引数を考慮に入れるためにDragonfly :: DataStorage :: FileDataStore#storeを変更/モンキーパッチする必要があります。

興味深いことに、なぜ画像をその形式で保存したいのですか?

乾杯マーク

于 2010-05-01T09:59:43.923 に答える