ActiveRecord Transaction и возвращает сохраненный идентификатор модели - PullRequest
2 голосов
/ 16 сентября 2011

Я хочу использовать транзакции ActiveRecord для сохранения трех моих моделей. Мне удалось найти несколько хороших учебных пособий, таких как

http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

http://ar.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

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

У кого-нибудь есть лучшее решение или обходной путь для этой проблемы? Я использую Rails 2.3.8.

Ответы [ 2 ]

3 голосов
/ 16 сентября 2011

Обычно, когда вам нужно сохранить объекты со связями, это означает, что вы должны использовать accepts_nested_attributes_for. Смотри документ здесь .

Это, безусловно, самый чистый и лучший способ продолжить.

1 голос
/ 16 сентября 2011

А как же:

SomeClass.transaction do
  first_record = SomeClass.create(... vars ...)
  second_record = SomeClass.create(... vars ...)
  third_record = SomeClass.create(... vars ...)

  second_record.update_attributes(:related_id=>first_record.id)
  third_record.update_attributes(:related_id=>second_record.id)
end

Это создаст объекты и назначит идентификаторы в одной общей транзакции. Если это не удается, все записи должны быть откатаны, включая создание записей в первую очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...