Rails как перезагрузить представление после завершения статуса задания?

#javascript #ruby-on-rails

#javascript #ruby-on-rails

Вопрос:

Я работаю над тестовым проектом, в котором кто-то вводит URL-адрес в форму, и я использую активное задание для получения изображения предварительного просмотра open graph protocol, а затем я хочу перезагрузить страницу с помощью javascript, чтобы показать изображение после завершения работы.

У меня все работает, кроме перезагрузки:

Контроллер:

 def open_graph_preview
  @new_preview = Preview.new
  @preview = Preview.last
  # sends newly created Preview to Job
  @job = FindOpenGraphImageJob.perform_later(@preview)
  # begins status check on currently running Job
  @job_status = ActiveJobStatus.fetch(@job.job_id)
end
  

Задание:

 def perform(preview)
  # Uses Faraday to get all info on the given URL
  response = Faraday.get(preview.url)
  # Uses OGP gem to parse the meta data from Faraday response
  open_graph = OGP::OpenGraph.new(response.body)

  @preview = Preview.find(preview.id)
  # Updates the image_url with the open graph image url
  @preview.update_attribute :image_url, open_graph.image.url
end
  

Вид:

 <h1>Open Graph Protocol Preview</h1>

<div class="d-flex justify-content-center">
  <%= form_with(model: @new_preview, local: true) do |form| %>

    <div class="field form-group">
      <%= form.label :url %>
      <%= form.text_field :url, class: 'form-control' %>
    </div>

    <div class="actions form-group">
      <%= form.submit %>
    </div>
  <% end %>
</div>

<div class="d-flex justify-content-center" style="padding:50px;">
  <img src="<%= @preview.image_url %>">
</div>
  

Может кто-нибудь, пожалуйста, помочь мне разобраться, как использовать javascript для проверки @job_status в контроллере и перезагрузки страницы, когда @job_status.completed? ?

Комментарии:

1. Это очень широкий вопрос. Я не уверен, что вы получите помощь, которую ищете. В общем, я делаю что-то вроде этого: (1) прикрепляю on ajax:success обработчик к моей форме, (2) отправляю форму через js и возвращаю модал отслеживания статуса, (3) загружаю модал с помощью прикрепленного обработчика, (4) модальные опросы статуса задания (используя счетчик или какой-либо другой визуальный виджет для указания опроса / прогресса), (5) когда задание завершено, modal извлекает HTML blob и загружает в DOM.

2. Спасибо за ваш ответ, это неприятная проблема, потому что кажется, что она не должна быть такой широкой или сложной. Но чем больше я понимаю масштаб проблемы, тем больше понимаю, насколько это сложно.

3. Да, я тебя понял. Формат вопросов и ответов не всегда подходит для той стадии, на которой вы находитесь. LMK если вы зациклились на чем-то конкретном или хотите немного пнуть его — я мог бы открыть чат и уделить немного времени, если это поможет.

4. Спасибо, это потрясающе. В настоящее время я пытаюсь использовать ActionCable для решения проблемы, но если это не сработает, я обязательно расскажу вам об этом.

5. Понял. ActionCable был слишком большим скачком для меня на данный момент, поэтому я уклонился от него. Но, дерзайте!!!