Rails API文档针对has_many_attached
和has_one_attched
方法声明了the following:
如果未设置:dependent选项,那么只要销毁记录,所有附件都会被清除(即销毁)。
具体来说,我应该为此选项指定什么值?
答案 0 :(得分:2)
我假设您正在使用Rails 5.2。该文档不是很好,但是源代码有助于填补空白。以下是相关文件中的几行内容(has_one_attached
和has_many_attached
的代码相同)
# /active_storage/attached/macros.rb
def has_one_attached(name, dependent: :purge_later)
...
if dependent == :purge_later
after_destroy_commit { public_send(name).purge_later }
else
before_destroy { public_send(name).detach }
end
end
根据方法定义(同样,has_one_attached
和has_many_attached
都是相同的),如果没有另外指定,:dependent
将被设置为:purge_later
。因此,当删除基础记录时,您将获得以下结果:
has_one_attached :photo
将清除photo
。
has_one_attached :photo, dependent: :purge_later
将导致照片被清除。
has_one_attached :photo, dependent: :detach
将导致照片分离,但活动存储区仍保持不变。
请注意,:purge_later
以外的任何内容都将导致附件被分离而不是被清除。所以不正确:
has_one_attached :photo, dependent: :purge
将导致照片被分离,而不是被清除。
该代码似乎已经在Rails 6中经过了重大的重构,因此可能已经解决了这种奇怪的情况。
答案 1 :(得分:0)
添加:nullify
可能会帮助您解决问题。查看文档:{{3}}