Rails + Dragonfly gem:基于ActiveRecord对象属性将图像保存在目录结构中

时间:2010-04-24 15:34:18

标签: ruby-on-rails ruby image paperclip dragonfly-gem

我正在使用dragonfly gem管理我的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

但是,我仍然不知道如何传递ActiveRecord对象 user.nameuser.album.namerelative_storage_path等属性 创造我理想的道路。

你怎么知道我怎么做这样的事情?

1 个答案:

答案 0 :(得分:5)

Mark Evans这位宝石作家帮我一个忙,并在谷歌小组回答了这个问题。以下是他的答案,对我的案例非常有用:

你好

你无法开箱即用,因为数据存储是 有目的地设计非常简单 - 你传递数据,它给出 你支持等等。

如果你想这样做,你将不得不修补附件#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需要两个 args现在。

然后你必须修改/ monkey-patch Dragonfly :: DataStorage :: FileDataStore#store考虑到了 第二个结果。

出于兴趣,为什么要将图像存储在其中 格式?

干杯 马克