2010-04-24 44 views
1

我使用dragonfly gem來管理我的Rails應用中的圖像和附件,並且需要基於我的 用戶模型將圖像存儲在特定的目錄結構中。 讓我們說,我有其中有一個名字用戶模型和每個用戶都有許多 專輯,其中有一個名字也,則我想將圖像存儲在 "#{RAILS_ROOT}/public/system/#{user.name}/#{user.album.name}/#{suffix}"Rails +蜻蜓寶石:在基於ActiveRecord對象屬性的目錄結構中保存圖像

我已經成功地改變了root_path在龍飛,我甚至 overrided relative_storage_path這樣的:

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

但儘管如此,我不知道我怎麼可以通過ActiveRecord的對象 屬性像user.nameuser.album.namerelative_storage_path 創建我的理想拍H。

你有什麼想法我可以做這樣的事情嗎?

+1

http://stackoverflow.com/questions/2705003/rails-dragonfly-gem-saving-image-in-a-directory-structure-based-on-activerecor完全重複 – 2010-04-24 15:45:06

回答

5

馬克埃文斯寶石的作者幫了我一個忙,並在谷歌上回答了這個問題。下面是他的回答是工作得很好我的情況:

您好

你不能做到這一點的開箱,因爲數據存儲是 特意設計得非常簡單 - 你在數據傳遞,它給你 你回uid等

如果你想這樣做,你必須猴子補丁附件#保存!像 這樣:

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以考慮 第二個參數。

出於興趣,你爲什麼要圖像以 格式存儲?

乾杯 馬克

+3

以上答案不再需要,因爲蜻蜓現在支持自定義存儲路徑:http://markevans.github.com/dragonfly/file.Models.html#Storage_options – 2012-01-08 11:52:02

+0

@MarkEvans鏈接現在已經死了:( – Rads 2014-06-09 11:32:03

+0

新鏈接是http:///markevans.github.io/dragonfly/models/#storage-options – 2014-07-29 09:32:43