Rails has_many присваивает дочерние идентификаторы, делает родительский недействительным, потому что родительский должен иметь дочерний - PullRequest
0 голосов
/ 08 апреля 2020

вот ассоциации моделей

class Driver
  has_many :cars

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

Записи автомобилей уже существуют. Для этого не нужно иметь водителя

первый автомобиль с идентификатором 1, ему назначается водитель 1

driver1.car_ids = [1]

driver1 теперь имеет автомобиль

Теперь мы создаем водителя 2 с автомобилем 1

driver2.car_ids = [1]

driver1 становится недействительным, потому что у него больше нет машин

Каков наилучший способ справиться с этим?

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Причина, по которой это не удается, заключается в том, что в вашей текущей настройке автомобиль может иметь только одного водителя. Поскольку вы назначаете driver1 для автомобиля, а затем назначаете driver2 для автомобиля, driver2 переопределяет driver1, делая водителя 2 владельцем автомобиля. Если вы хотите, чтобы в автомобиле было много водителей, вам следует изменить настройки на:

class Car
  has_many :drivers
end

Это позволит вам назначить для вашего автомобиля множество водителей (или только одного водителя, если это предусмотрено). ,

0 голосов
/ 08 апреля 2020

Ваша ассоциация терпит неудачу, так как в то время как у водителя может быть много автомобилей в вашей настройке, автомобиль принадлежит одному водителю. Вам нужно использовать таблицу соединений и связь has_and_belongs_to_many.

Ruby в направляющих Rails - has_and_belongs_to_many

...