0

私は3つのモデルを持っています

class Vehicle < ActiveRecord::Base
 has_one:driver ,:through=>:vehicle_driver
end

class Vehicle_Driver < ActiveRecord::Base
 belongs_to:vehicle
 belongs_to:driver
end

vehicle_id と driver_id のみを持つ

class Driver < ActiveRecord::Base
 has_one:vehicle_driver
end

したいのは

  • 車両を個別に登録する

  • ドライバーを個別に登録する

  • 次に、1 つの車両に 1 人のドライバーのみを割り当てることができるように、ドライバーを車両に割り当てます。

そしてさらに

  • ドライバーを別の車両に割り当てた場合、その初期の関係を削除する必要があります

これは上の関係から可能ですか...?????

どんな助けでも大歓迎です..

前もって感謝します

4

1 に答える 1

3
  1. なぜ中間クラスなのか、それはあなたの要件に反するので、削除してください。

  2. したがって、Vehicle と Driver の両方のモデルが、もう一方の has_one を使用するようにします。それらが相互に指していない場合、問題につながる可能性のある重複した関係が生成されます。したがって、'has_one' 関係を 1 つだけ持ち、@vehicle.find_by_driver を実行して、ドライバーに既に車両が割り当てられているかどうかをテストするのが最善です。

  3. リレーションシップを保存するときは、他のリレーションも更新します: 3a @vehicle.driver = @driver 3b @vehicle.driver.vehicle = @vehicle # 強制的に相互にポイントするようにします。

  4. Vehicle モデルで、ドライバーが nil である車両のリストを返すメソッドまたはスコープを追加します。4a Vehicle.all.where(:driver.nil?) # アイデアを与えるために頭から

車両の関係を削除する場合は、5a @vehicle.driver.vehicle = nil 5b @vehicle.driver = nil を実行します。

これが正しい方向に役立つことを願っています。

于 2012-08-17T12:25:20.743 に答える