Rails accept_nested_attributes_for с идентификатором без автоинкремента - PullRequest
0 голосов
/ 05 августа 2020

У меня есть модель B, первичный ключ которой id не увеличивается автоматически (потому что его значения являются указателями из другой системы).

Я получаю сообщение об ошибке при попытке создать новый экземпляр B путем установки вложенных атрибутов:

ActiveRecord::RecordNotFound: Couldn't find B with ID=076dda41-afa6-4324-b6fd-219d99089dfc for A with ID=846205

a.attributes = {
  b_attributes: {
    id: '076dda41-afa6-4324-b6fd-219d99089dfc'
  }
}

Как я могу заставить задание построить новый экземпляр B, когда Я указываю id?

Этот проект находится на Rails 4.0.1

1 Ответ

0 голосов
/ 05 августа 2020

У меня нет доступа комментатора, поэтому отвечаю здесь.

Вы можете сослаться на один из примеров здесь Даже я делаю какие-то манипуляции.

Что Я в основном подозреваю, что это атрибут id.

Во вложенных атрибутах, когда вы передаете ha sh без id, это считается новой записью и создается. Когда вы передаете id, он пытается найти запись для обновления. Когда вы передаете _destroy, он помечается для уничтожения.

Обходной путь, о котором я мог подумать:

  1. Попробуйте сделать id столбец НЕ первичным ключом, чтобы Rails не попробуйте найти существующую запись. Но в этом случае вам нужно будет позаботиться о части обновления. ИЛИ
  2. Создайте новый столбец guid, в котором у вас будет этот идентификатор, и сохраните столбец id как столбец по умолчанию Rails. Просто настройте все ассоциации на guid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...