【问题标题】:About one to one relationship in Models in rails关于 Rails 模型中的一对一关系
【发布时间】:2012-08-17 12:12:25
【问题描述】:

我有三个模型

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

我想做的是

  • 独立注册车辆

  • 独立注册驱动程序

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

还有更多

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

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

任何帮助将不胜感激..

提前致谢

【问题讨论】:

    标签: ruby-on-rails models relationship one-to-one


    【解决方案1】:
    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 = 无 5b @vehicle.driver = 无

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-15
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2013-11-20
      相关资源
      最近更新 更多