0

我有三个模型

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

我想做的是

  • 独立登记车辆

  • 独立注册驱动程序

  • 然后将驾驶员分配给车辆,这样一辆车只能分配一名驾驶员,反之亦然

并进一步

  • 如果我将司机分配给另一辆车,则必须删除其早期关系

这可能从上述关系...??????

任何帮助将不胜感激..

提前致谢

4

1 回答 1

3
  1. 为什么是中间类,它与您的要求相矛盾,所以将其删除。

  2. 因此,只需让 Vehicle 和 Driver 模型都使用 has_one 。如果它们不相互指向,它会生成可能导致问题的重复关系。所以最好的办法是只有一个“has_one”关系,并执行@vehicle.find_by_driver 来测试驾驶员是否已经分配了车辆。

  3. 保存关系时,还要更新另一个关系: 3a @vehicle.driver = @driver 3b @vehicle.driver.vehicle = @vehicle # 强制使它们指向彼此。

  4. 在 Vehicle 模型中,添加一个方法或范围以返回 driver 为 nil 的车辆列表。4a Vehicle.all.where(:driver.nil?) # 从我的脑海中,只是为了给出一个想法

如果要删除车辆的关系,请执行 5a @vehicle.driver.vehicle = nil 5b @vehicle.driver = nil

希望这可以帮助您朝着正确的方向前进。

于 2012-08-17T12:25:20.743 回答