Вы можете посмотреть на использование DelayedJob для выполнения этих запросов за вас и получить дополнительную таблицу с именем "NotificationQueue". Когда задание завершено (с его набором результатов), сохраните набор результатов и идентификатор пользователя человека, который сделал этот запрос, в таблице NotificationQueue. затем при каждой загрузке страницы (и, если хотите, каждые 15-20 секунд), опросите эту базу данных и посмотрите, есть ли какие-либо выполненные запросы.
DelayedJob действительно хорош, потому что вы пишете свой код, как будто он не будет отложенной работой, и просто измените код, чтобы сделать следующее:
#Your method
Query.do_something(params)
#Change to
Query.send_later(:do_something, params)
Мы постоянно используем его на работе, и он прекрасно работает.