Rails has_many分配子代ID会导致父代无效,因为父代必须有一个子代

时间:2020-04-08 02:19:57

标签: ruby-on-rails has-many

这是模型关联

class Driver
  has_many :cars

  validates :cars, presence: true
end
class Car
  belongs_to :driver
end

汽车记录已经存在。不需要驱动程序

第一辆ID为1的汽车被分配给驾驶员1

driver1.car_ids = [1]

driver1现在有一辆车

现在我们用汽车1创建驾驶员2

driver2.car_ids = [1]

driver1无效,因为它不再有汽车

处理此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

失败的原因是,在您当前的设置中,一辆汽车只能有一个驾驶员。由于将驱动程序1分配给汽车,然后将驱动程序2分配给汽车,因此驱动程序2会覆盖驱动程序1,使驱动程序2成为汽车所有者。如果您想在汽车中有很多驾驶员,则应将设置更改为:

class Car
  has_many :drivers
end

这将使您可以为汽车分配许多驾驶员(如果需要,则仅分配一个驾驶员)。

答案 1 :(得分:0)

您的关联失败,因为当驾驶员可以在您的设置中拥有多辆汽车时,一辆汽车属于一名驾驶员。您需要使用联接表和has_and_belongs_to_many关联。

Ruby on Rails Guides - has_and_belongs_to_many