删除附件后跳过ActiveStorage文件清除

如标题中所述,我正在尝试获取它,以便一旦用户删除系统中的附件,我们就可以跳过Blob清除。原因是我们希望保留上载文件(或Blob)的副本,即使有人在我们的系统中将其删除了也是如此。由于activeStorage对此没有配置,因此我一直试图在#purge中修补activeStorage::Blob方法的问题,但没有成功。

这是我的初始化程序:

# config/initializers/active_storage.rb
module CoreExtensions
  module activeStorage
    module Blob
      def purge
        raise "here"
      end
    end
  end
end

activeSupport::Reloader.to_prepare do
  activeStorage::Blob.include CoreExtensions::activeStorage::Blob
end

这似乎无能为力,并且我删除文件时raise从未被命中。

我也尝试过:

activeStorage::Blob.include CoreExtensions::activeStorage::Blob

没有activeSupport::Reloader.to_prepare块,但在启动应用程序时始终出现此错误:“未定义的方法'has_one_attached'”

有什么想法可以成功地修补猴子吗?也欢迎跳过斑点清除的其他想法。

jian385330454 回答:删除附件后跳过ActiveStorage文件清除

您可以猴子打ActiveStorage::Attachment

将初始化代码更改为此:

module MonkeyPatch
  def purge
    raise 'your patch here'
  end

  def purge_later
    raise 'and here'
  end
end

ActiveStorage::Attachment.prepend MonkeyPatch

默认情况下,它们是:

def purge
  delete
  blob&.purge
end

def purge_later
  delete
  blob&.purge_later
end
,

我最终发现这可行:

# config/initializers/active_storage.rb
Rails.application.config.after_initialize do
  ActiveStorage::Blob.class_eval do
    def purge
      # skip purge
    end
  end
end
本文链接:https://www.f2er.com/3106399.html

大家都在问