Триггер обратного вызова after_commit, но НЕ в результате касания - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь вызвать мой обратный вызов всякий раз, когда объект фиксируется.Но я не хочу, чтобы обратный вызов срабатывал, если after_commit является результатом простого прикосновения к объекту.Я изучил after_update, after_update_commit и after_save, но ни один из них, похоже, не соответствует описанному поведению.Есть ли способ сделать это, кроме как заставить мой обратный вызов перезагрузить объект из базы данных и проверить, что перед продолжением был изменен столбец, отличный от updated_at?Я на Rails 5.2.

1 Ответ

0 голосов
/ 15 марта 2019

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

# only kick off job if the update is not due to a touch
after_commit :kickoff_job, on: :update, unless: -> { transaction_changed_attributes.keys == ['updated_at'] }

таким образом, обратный вызов не выполняется, если after_commit является результатом простого прикосновения.

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