gpt4 book ai didi

ruby-on-rails - 我想停止carrierwave删除文件

转载 作者:行者123 更新时间:2023-12-04 02:39:52 26 4
gpt4 key购买 nike

我想设置一个特定的上传器,这样当相关的模型对象被销毁时,亚马逊 s3 上的文件不会被删除。

这样做的原因是我的上传模型记录虽然已销毁,但仍然在第二个审计表中引用。

我正在使用雾、载波和 s3。

最佳答案

好吧 AFAIK remove_previously_stored_files_after_update仅当模型对象为 updated 时才有效所以将其设置为 false不会删除旧的 file期间update
但是在您的情况下,您必须确保在相关模型对象被销毁时文件仍然存在

好吧,我认为(如果您检查代码 here )目前在 Carrierwave 中没有任何可用的机制。去做

但您可以覆盖 remove!为了达到同样的目的,我想这涉及设置 attr_accessor (这是决定是保留文件还是删除文件的标志)

在您想要的模型中定义一个 attr_accessor (说keep_file)

并在所需的上传器中覆盖删除!方法

class MyUploader < CarrierWave::Uploader::Base 
def remove!
unless model.keep_file
super
end
end
end

并确保您设置了 attr_accessor在销毁对象之前(如果您想保留已删除的文件)

例子
u = User.find(10)
u.keep_file = true
u.destroy

这将确保在从数据库中删除记录时清理文件

让我知道是否有更好的方法来做到这一点

希望这有帮助

关于ruby-on-rails - 我想停止carrierwave删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com