ActiveRecord :: Base.transaction с вложенными транзакциями - PullRequest
0 голосов
/ 17 октября 2018

Я получил приложение rails (Rails v4.2.4 и Ruby v2.2.2), которое иногда работает магически неправильно ... поэтому давайте попробуем объяснить, что происходит.

По некоторым причинам, не постоянные мои записидублируются за доли секунды, он просто дублирует транзакцию и сохраняет дублированную запись

Я хотел бы знать, если кто-то из вас «хозяин» смирился с этой ситуацией.

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

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

Прошу помощи!rs ..

1 Ответ

0 голосов
/ 17 октября 2018

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

Теперь ActiveRecord :: Base.transaction обычно используется, когда вы хотите создать / обновить два или более несвязанных объекта за один вызов.Вы хотите, чтобы все они преуспели, иначе ничего не делайте.Как и при создании одного объекта, все обратные вызовы по умолчанию обернуты внутри транзакции, поэтому вам не нужно добавлять блок ActiveRecord :: Base.transaction в этом случае.

Более продвинутый способ - использовать ActiveRecord :: Запирание .Этот метод особенно важен, когда вы работаете с финансовыми данными.

Чтобы воспроизвести ошибку, просто отправьте два запроса curl одновременно.

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