Rails создают или обновляют для связанных записей - PullRequest
0 голосов
/ 22 марта 2019

У меня есть пример кода, который вызывает «Дублирующее ожидание». Вместо этого я хочу просто пропустить, если дубликат существует.

(1..10).each do |page|
      group.products << [{id: 1, title: "Example A"}, {id: 2, title: "Example B"}]
      group.save
end

Массив product является статическим только для этого примера, важно то, что он имеет идентификаторы, поэтому продукты существуют в базе данных.

Проблема заключается в том, что я назначаю продукт, который я уже назначил в прошлом, который вызывает «Не уникальное исключение». В этом случае я бы просто пропустил ассоциацию. Как это возможно?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Вы можете использовать create_with в сочетании с find_or_create_by:

(1..10).each do |page|
  group.products << Product.create_with(title: "Example A").find_or_create_by(id: 1)
  group.products << Product.create_with(title: "Example B").find_or_create_by(id: 2)
  group.save
end
0 голосов
/ 22 марта 2019

Вы присваиваете тот же динамический массив объектов для group.products в десятикратном цикле, который создает дубликаты.Почему вы не запускаете это без цикла?Я не думаю, что есть необходимость в петле.

...