防止Paperclip在更新时删除/覆盖附件
我很难弄清楚如何防止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论坛
- rails上的ruby AbstractController :: Helpers :: MissingHelperError:缺少帮助文件助手//
- Rails 4 – Sprockets :: FileNotFound在Welcome#index中
- Webpack模块构建失败的意外令牌(rails反应构建)
- Rails发送多条短信
- 在Ruby on Rails中生成具有多对多的模型
- 如何在OSX上安装Ruby on Rails 3?
- 在推送到Heroku之前自动预编译资产
- 从ruby访问Javascript变量
- ActiveRecord :: Base的未定义方法`mass_assignment_sanitizer =’:Class(NoMethodError)