Railsプロジェクトで多対多リレーションシップに問題があります。例を挙げて説明することができます: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
人の連絡先情報を作成/更新できる人のフォームがあります。私はこれを使ってBobに番号555-555-1212
を割り当てます。その番号のPhoneNumber
オブジェクトが存在しない場合は、作成します(標準accepts_nested_attributes_for
の動作のように)。しかし、それが存在する場合は、PersonPhoneNumber
オブジェクトを作成してBobにそのPhoneNumber
を関連付けるだけです。
これを最も上手くいく方法は? PersonPhoneNumber
にbefore_validation
フックを入れて、PhoneNumber
を探してphone_number_id
に設定しようとしましたが、実際には奇妙な動作(メッセージがIllegal instruction: 4
で私のRailsサーバーがクラッシュするなど)が発生しました。
これは多対多の関係であり、 'has_many/belongs_to'ではありません。 –