我一直在寻找 AR 中的这种功能,但似乎找不到。AR 的 Dirty 实现表明,一个已经持久化的实例只有在其直接属性之一发生变化时才被认为是脏的。所以,让我们说:
class Picture < ActiveRecord::Base
belongs_to :gallery
has_one :frame
end
在这种情况下,我可以执行以下操作:
p = Picture.new(:gallery => Gallery.new, :frame => Frame.new)
p.save #=> it will save the three instances
p.gallery = Gallery.new
p.save #=> will not save the new gallery
p.gallery_id_will_change!
p.gallery = Gallery.new
p.save #=> this will save the new Gallery
但现在我不能为 has_one 关联做类似的事情,因为 Picture 实现不拥有引用它的属性。因此,似乎这种肮脏的标记是不可能的。或者不是吗?