Частичное частичное широковещательное обновление 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