簡體   English   中英

防止Paperclip在更新時刪除/覆蓋附件

[英]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附件類似的問題。

有一個補丁可以解決這個問題。 我無法讓它為自己工作,但它值得一試!

http://github.com/alainravet/paperclip/tree/keep_old_files

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.

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