AR でこの種の機能を探していましたが、見つからないようです。AR の Dirty 実装は、直接の属性の 1 つが変更された場合にのみ、既に永続化されたインスタンスがダーティと見なされることを示しています。だから、言ってみましょう:
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
しかし、Picture 実装はそれを参照する属性を所有していないため、has_one アソシエーションに対して同様のことを行うことはできません。したがって、そのような汚いマークアップは不可能のようです。それともそうではありませんか?