我正在使用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.name
和user.album.name
到relative_storage_path
等属性
创造我理想的道路。
答案 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考虑到了 第二个结果。
出于兴趣,为什么要将图像存储在其中 格式?
干杯 马克