[英]Preventing Paperclip from deleting/overwriting attachments on update
我很難弄清楚如何防止Paperclip刪除舊版本的附件(圖像)。
我有一個模型,網站,有一個附件,標志。 我想保留舊徽標,因為我將跟蹤模型的更改並希望查看徽標的歷史記錄。
我正在跟蹤另一個模型中的更改,該模型具有對文件路徑的引用。 我的問題是,在使用新徽標更新網站時,Paperclip會先刷新舊徽標。
令我驚訝的是,在創建新附件之前,沒有可以切換到防止Paperclip沖洗舊附件的選項。
有任何想法嗎?
有一個新選項告訴paperclip保留舊附件:
https://github.com/thoughtbot/paperclip/commit/65e8d4f6de50732d8e1b https://github.com/thoughtbot/paperclip/issues/60
使用簡單:
has_attached_file => :attachment,
:styles => { :thumb => 100x100! },
:preserve_files => true
它尚未記錄,並進行了一些挖掘,所以我想在這里分享。
因為附件是在類級別定義的,所以Paperclip使用它自己的插值庫在字符串中插入符號。 您可以使用此庫創建自己的插值。
我會在模型中添加一個名為attachment_version
或類似的字段,然后在每次更改文件時增加此版本號。 然后,在初始化文件中為它創建插值:
Paperclip.interpolates :version do |attachment, style|
attachment.instance.attachment_version
end
現在您可以在字符串中使用:version
:
class Model < ActiveRecord::Base
has_attached_file :something, :path => " :rails_root/public/somethings/etc/:version.:extension"
end
有關更多信息,請參閱Wiki文檔 。
[更新]
經過一番挖掘(參見本答案的評論),我得出的結論是Paperclip 仍將刪除舊的附件,因為在Paperclip::Atachment#attach
調用了代碼。 處理此問題的最佳方法可能是創建一個基於Paperclip::Storage::Filesystem
的新存儲引擎並覆蓋#flush_deletes
。 請注意,該方法無法判斷文件是否正在排隊等待刪除,因為它所屬的模型正在被刪除或者新文件正在其位置上傳。
去年夏天在Rails博客上工作時,我遇到了與Paperclip附件類似的問題。
有一個補丁可以解決這個問題。 我無法讓它為自己工作,但它值得一試!
LIB / paperclip_monkey_patch.rb:
module Paperclip
class Attachment
def clear
# nop
#raise "hell"
# op
instance_write(:file_name, nil)
instance_write(:content_type, nil)
instance_write(:file_size, nil)
instance_write(:updated_at, nil)
end
end
end
然后在刪除附件的任何文件的頂部添加此行:
要求'paperclip_monkey_patch'
感謝Ruby論壇
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.