簡體   English   中英

Rails + Dragonfly gem:基於ActiveRecord對象屬性將圖像保存在目錄結構中

[英]Rails + Dragonfly gem: Saving image in a directory structure based on ActiveRecord object attributes

我正在使用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來創建理想的路徑。

你知道我該怎么做嗎?

寶石作家Mark Evans幫了我一個忙,並在Google Group上回答了這個問題。 這是他的回答,對我的情況非常有效:

嗨,您好

您不能開箱即用地進行此操作,因為數據存儲被故意設計為非常簡單-您可以傳遞數據,還可以返回一個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以考慮第二個arg。

出於興趣,為什么要以這種格式存儲圖像?

干杯馬克

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM