Каковы лучшие практики обновления нескольких div с помощью ActionCable в Ruby on Rails? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть сайт Ruby on Rails.На одной из страниц индекса есть таблица с несколькими строками.У меня также есть фоновое задание, которое выполняет определенные операции в каждой строке, что занимает около 5-10 секунд каждая.

Я хотел бы обновить статус для каждой строки с «Обработка ...» до «Готово»когда обработка в фоновом задании завершена.

Я думал использовать Action Cable для обновления, но на сегодняшний день я использовал Action Cable для обновления только одного элемента на странице, но не нескольких элементов.

Мне было интересно, как правильно настроить мой код для обновления статуса в каждой строке.Нужно ли открывать канал для каждой строки отдельно?

1 Ответ

0 голосов
/ 27 декабря 2018

Определенно Вы можете сделать это.И вам не нужно открывать канал для каждой строки.Просто используйте идентификатор задания, статус которого был изменен, и идентифицируйте соответствующую строку в таблице с таким же идентификатором.

ActionCable.server.broadcast "job_status_update", job_id: 'xxxxx', status: 'complete'

.html

<table>
  <% jobs.each do |job|%>
   <tr>
     <td id="<%= job_id %>">
     <%= job.status %>
     </td>
   </tr>
 <% end %>
</table>

.coffee

App.chatChannel = App.cable.subscriptions.create { channel: "JobChannel" },
   received: (data) ->
     $(data.job_id).innerText(data.status)
...