У меня есть длительное задание, которое очищает информацию из Интернета (около 2 минут), и у меня возникают проблемы с обновлением моих страниц / просмотров новыми (дополнительными) экземплярами данных, которые я очищаю.
Я думал, что это может быть выполнимо с помощью обратного вызова (при создании / обновлении), но я получаю сообщение об ошибке, говорящее, что я перенаправляю слишком много раз, поэтому я подумал, что, скорее всего, мне понадобится некоторая комбинация ajax и / или обратного вызова для достижения непрерывногообновление страницы.Я знаком с использованием ajax для обновления раздела страницы, когда пользователь создает сообщение или комментарий, но я не уверен, как это сделать с фоновой работой.Я кратко поиграл с использованием ActionCable (просто открывая канал и каким-то образом передавая туда данные), но нет ли более простого способа по существу обновить страницу при изменении базы данных?Мое текущее решение состоит в том, чтобы просто js перезагрузить страницу на некоторое время, но это кажется ужасно примитивным.
Контроллер
def create
@search = Search.new(search_params)
if @search.save
PreRunAllJob.perform_later(@search.title, @search.id)
respond_to do |format|
format.html { redirect_to search_path(@search) }
format.js # currently empty
end
else
render :new
end
end
def show
@search = Search.find(params[:id])
@jobs = Job.where(search_id: @search.id).order(quality: :desc)
end
Модель поиска
class Search < ApplicationRecord
has_many :jobs
end
Модель задания
class Job < ApplicationRecord
belongs_to :search
end
search / show.html.erb
<div class="container">
<%= render "jobs", remote: true %>
</div>
_jobs.html.erb
[...]
<% @jobs.each do |job| %>
<div class="card">
[...]
</div>
<% end %>
[...]
Итак, для краткого изложения: длительное фоновое задание создаетэкземпляр «Поиск», который имеет много экземпляров «Работа».На search / show.html.erb я отображаю карточки, каждая из которых содержит информацию об одном экземпляре «Job».Пока поиск продолжается, я бы хотел соответственно обновить представление (например, накапливая).Какой путь я могу / должен выбрать здесь?чистый аякс?Callbacks