次の(サニタイズされた)モデルがあります。
class Person < ActiveRecord::Base
attr_accessible :name, :first_name, :last_name, :age, :job_title, :salary, :ssn, :prison_convictions, :addresses_attributes
has_many :addresses, inverse_of: :person
accepts_nested_attributes_for :addresses, allow_destroy: true
end
class Address < ActiveRecord::Base
attr_accessible :zip_code, :street,:house_number,
:unique_per_person_government_id
belongs_to :person, inverse_of: :addresses
validates_uniqueness_of :unique_per_person_government_id, scope: :person_id
end
問題は次のとおりです。
Person Joe Shmoe が現在自分に関連付けられている 2 つのアドレスを持っているとします。
666 Foo Street, 12345 の一意の ID: 「ABCDEFG」および 777 Lucky Avenue, 54321 の一意の ID: 「GFEDCBA」</p>
そして、次の投稿がフォームから来たとしましょう:
{:addresses_attributes =>
{ [0] => {:unique_per_person_government_id => “ABCDEFG”, :street=> “Foo Street”, :house_number => 666, :zip_code=>12345, _destroy => 1}
[1] => {:unique_per_person_government_id => “ABCDEFG”, :street=>”Bar Street”, :house_number => 888, :zip_code => 12345, _destroy => 0}
}
この動作は、2 番目の (つまり、新しい) レコードが最初に一意性について検証され、検証に失敗するように見えます。
marked_for_destruction?
私が望む動作は、それ以上の検証を行う前に、すべての要素を非常に単純に削除することです。
このようにライフサイクルを再配線するにはどうすればよいですか? これを達成するためのより良い方法はありますか?
ありがとう!