Частичное частичное широковещательное обновление Turbo-rails

Я хочу транслировать обновления ActiveRecord для отдельных частей в зависимости от их маршрута. Как я мог это сделать?

Пример: у меня есть модель Post, которая has_many :comments. Комментарии могут быть обновлены, и у нас есть две части для commentв следующих папках, чтобы отобразить их с использованием отдельного шаблона:

  • /views/comments/_comment.html.erb
      <%= turbo_stream_from comment %>
<%= turbo_frame_tag dom_id(comment) do %>
  //one way of displaying the comment
<% end %>
  • /просмотров/ посетителей/comments/_comment.html.erb
      <%= turbo_stream_from comment %>
<%= turbo_frame_tag dom_id(comment) do %>
  //another way of displaying the comment
<% end %>

Каждый раз, когда я обновляю запись, она транслируется с помощью турбо-потока.

      class Comment < ApplicationRecord
 broadcasts_to :post
end

Проблема в том, что транслируемый результат использует /views/comments/_comment.html.erbво всем приложении. Я хотел бы иметь способ транслировать и повторно отображать комментарий, используя частичную область видимости, когда представление находится в определенной области, и использовать частичную часть без области действия, когда область не определена, возможно ли это?

1 ответ

Я нашел ответ в драгоценном камне... Это можно сделать, изменив dom_id комментария посетителя на "#{dom_id(comment)}_visitor"и явно передать частичное значение в Broadcast_replace_to

  • /views/visitor/comments/_comment.html.erb
      <%= turbo_stream_from comment %>
<%= turbo_frame_tag "#{dom_id(comment)}_visitor" do %>
  //another way of displaying the comment
<% end %>
      class Comment < ApplicationRecord
  after_update_commit do
    broadcast_replace_to self
    broadcast_replace_to self, target: "#{dom_id(self)}_visitor", partial: 'visitor/comments/comment'
  end
end
Другие вопросы по тегам