假设我有三个Active Record模型:
class Tissue
has_many :boogers, as: :boogerable, dependent: :destroy
end
class Finger
has_many :boogers, as: :boogerable, dependent: :destroy
end
Class Boogers
belongs_to :boogerable, polymorphic: true
end
Run Code Online (Sandbox Code Playgroud)
假设我的应用程序可以将鼻屎从手指转移到组织上,一旦完成,手指就会被摧毁(哎呀!).出于某种原因,当手指被摧毁时,它也会破坏先前属于它的鼻屎并且因此被转移到组织中.在日志中我可以看到,当手指被摧毁时,它会记住用于属于它的鼻屎的ID并将其销毁.它不会检查以确保boogerable_type仍然是"手指",因此会破坏类型为"组织"的那些.
当手指被摧毁时,它正在这样做:
DELETE FROM boogers WHERE booger.id = 387
Run Code Online (Sandbox Code Playgroud)
什么时候应该这样做:
DELETE FROM boogers WHERE boogerable_id = 1 AND boogerable_type = 'finger'
Run Code Online (Sandbox Code Playgroud)
有没有人遇到过这个?