В общем, вам следует избегать использования дорогостоящего сквозного кода в обратных вызовах.Придет время, когда вы захотите обновить одну из этих записей без запуска этого кода, а затем вы начнете добавлять флаги, чтобы определить, когда должен выполняться этот обратный вызов, и всякие другие неприятности.Кроме того, если запись обновляется во время запроса, дорогой код обратного вызова замедлит весь запрос и, возможно, превысит время ожидания и / или заблокирует доступ других пользователей к вашему приложению.
Способом этого является создание записи вначале (возможно, с флагом / состоянием, которое сообщает остальной части вашего приложения, что обновление еще не «обработано»), то есть соответствующий код в настоящее время находится вВаш обратный вызов еще не запущен).Затем вы поставите фоновую работу, которая выполняет все, что есть в вашем обратном вызове.Если вы используете Sidekiq, вы можете использовать гем sidekiq-status для обновления статуса задания во время его выполнения.
Затем вы добавите контроллер / действие, которое проверяет работу задания.status и возвращает его в формате JSON, а некоторые JS проверяют это действие каждые несколько секунд, чтобы проверить состояние задания и соответствующим образом обновить интерфейс.
Даже если вы не хотите обновлять своих пользователей о статусе задания, фоновое задание, вероятно, все еще будет здесь, особенно если этот код очень дорогой или включает сторонние вызовы API,Если нет, то, скорее всего, он принадлежит контроллеру, и вы можете запустить все это в транзакции.Но если вам нужно сообщить своим пользователям о статусе этой работы, вам следует воспользоваться фоновой работой.