Rails プロジェクトの多対多の関係で問題が発生しています。それは例で説明することができます:
モデルPerson
とがありPhoneNumber
、 が結合しているとしPersonPhoneNumber
ます。人々は複数の電話番号を持つことができ、同じ電話番号で複数の人に連絡できるため、この関係は多対多です (ヘルプ デスクなどの場合)。
class Person < ActiveRecord::Base
has_many :person_phone_numbers
has_many :phone_numbers, :through => :person_phone_numbers
end
class PhoneNumber < ActiveRecord::Base
has_many :person_phone_numbers
has_many :people, :through => :person_phone_numbers
validates :number, :uniqueness => true
end
class PersonPhoneNumber < ActiveRecord::Base
belongs_to :person
belongs_to :phone_number
end
人の連絡先情報を作成/更新できる個人フォームがあります。555-555-1212
それを使ってボブに番号を割り当てます。その番号のPhoneNumber
オブジェクトが存在しない場合は、(標準的なaccepts_nested_attributes_for
動作のように) 作成する必要があります。PersonPhoneNumber
しかし、それが存在する場合は、 Bob を関連付けるためのオブジェクトを作成したいだけですPhoneNumber
。
これを最もエレガントに実現するにはどうすればよいですか? 一致するsetを探すためにbefore_validation
フックを挿入しようとしましたが、これにより非常に奇妙な動作が発生しました (Rails サーバーがメッセージでクラッシュするなど)。PersonPhoneNumber
PhoneNumber
phone_number_id
Illegal instruction: 4