ruby-on-rails Rails ActiveStorage:如何完全删除特定附件的所有变体(所有ActiveStorage DB记录和文件,原始附件除外)

wwtsj6pe  于 2023-10-21  发布在  Ruby
关注(0)|答案(2)|浏览(120)

如何完全删除特定附件的所有变体(但不是原始上传),这意味着:

  • 所有ActiveStorage表中的所有DB记录,以及
  • 文件夹/storage)中的所有相关文件?

模型方案是:Avatar has_one_attached :file
我试过...

ActiveStorage::VariantRecord.where(blob_id: @avatar.file.blob.id).destroy_all

.但这显然既不删除表active_storage_blobs中的条目,也不删除文件夹/storage中的相关文件。
(上下文:我需要在从原始上传的文件重新创建“旧”变体之前销毁它们,因为Rails显然不会自动替换“旧”变体。

r55awzrz

r55awzrz1#

只需在给定附件上调用ActiveStorage::Attached::One#purge

@avatar.file.purge

这直接清除附件(即,销毁blob和附件以及所有变体,并删除服务上的文件)

pbossiut

pbossiut2#

这将删除您想要刷新的变体:

Avatar.find_each.each do |avatar| 
  avatar.file.variant(:display_variant_1).image&.record&.destroy
  avatar.file.variant(:display_variant_2).image&.record&.destroy 
end

相关问题