1

我正在使用蜻蜓 gem来管理我的 rails 应用程序中的图像和附件,我需要根据我的用户模型将图像存储在特定的目录结构中。假设我有一个有名字的用户模型,每个用户都有很多专辑,也有一个名字,那么我希望图像存储在 "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"

我已经设法改变了 Dragon fly 中的 root_path,我什至像这样覆盖了 relative_storage_path:

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

但是,我仍然不知道如何通过 ActiveRecord 对象属性user.name来 创建我的理想路径user.album.namerelative_storage_path

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

4

1 回答 1

5

宝石作者 Mark Evans 帮了我一个忙,并在 google 小组上回答了这个问题。这是他的回答,对我的情况非常有效:

你好呀

你不能开箱即用,因为数据存储被故意设计得非常简单——你传入数据,它会给你一个 uid,等等。

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

然后,您必须修改/monkey-patch Dragonfly::DataStorage::FileDataStore#store 以考虑第二个参数。

出于兴趣,为什么要以这种格式存储图像?

干杯马克

于 2010-05-01T09:59:43.923 回答