ActiveRecord :: Callbacks документирует порядок в «Заказе обратных вызовов».
Нетранзакционные обратные вызовы выполняются в том порядке, в котором они определены.
class Topic < ActiveRecord::Base
after_save :log_children
after_save :do_something_else
...
end
При сохранении Topi c выполняется log_children, затем do_something_else.
Транзакционные обратные вызовы (after_commit, after_rollback) противоположны, последний определенный транзакционный обратный вызов выполняется первым.
class Topic < ActiveRecord::Base
after_commit :log_children
after_commit :do_something_else
...
end
Когда Topi c фиксируется, сначала запускается do_something_else, затем log_children.
Если есть сомнения, вы можете объединить их в один обратный вызов.
class Topic < ActiveRecord::Base
after_commit :commit_callback
private def commit_callback
log_children
do_something_else
end
...
end