Ищете способ постоянно обновлять представление об изменении БД - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть длительное задание, которое очищает информацию из Интернета (около 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

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