Добавление порядка по умолчанию к ассоциации has_many предотвращает переходы состояний в модели с использованием AASM - PullRequest
0 голосов
/ 15 января 2019

Так что это очень странная проблема, и я понятия не имею, что происходит. Основываясь на проблеме в нашем приложении, мы хотели, чтобы ассоциация has_many возвращалась с порядком по умолчанию, применяемым к нему каждый раз, когда вы читаете ассоциацию из базы данных. Я рекомендовал разработчикам, работающим над проблемой, добавить в ассоциацию следующее (что они и сделали):

has_many :shipment_items, -> { order(product_id: :desc) }, dependent: :destroy

Кажется, все в порядке, верно? Я думаю, нет. Я заметил, что несколько наших тестов сломались. У меня есть метод в нашей модели отгрузки, который устанавливает свойство модели на основе состояния статуса, в котором оно находится в определенный момент времени. Когда я регистрирую состояние статуса в тестах с примененным порядком, он остается в состоянии по умолчанию, так как я вручную перемещаю его в последующие состояния, используя методы взрыва.

Итак, я провел больше расследований и обнаружил, что реальная функция теперь также нарушена. Если я регистрирую состояние, используя тот же процесс, который я тестирую, он остается в состоянии по умолчанию, и регистрация его в методе виновника показывает это таким образом, но когда он фактически завершает запрос и перенаправляет на страницу ожидаемого завершения, объект в база данных находится в правильном состоянии, в котором, как я ожидаю, она будет находиться. Существуют некоторые промежуточные шаги, которые зависят от конкретного состояния, и эти шаги также приводят к неверному результату с лямбда-выражением в ассоциации.

Если я удаляю лямбда порядка по умолчанию из ассоциации, эта проблема исчезает. Я исключил возможность того, что упорядочение результатов ассоциации как-то связано с этим (упорядочение объектов не должно иметь никакого отношения к результату), поэтому я понимаю, что это очень странная ошибка в AASM. Любая помощь будет оценена!

...