Turbo-rails 不同范围的部分广播更新

Turbo-rails distinct scoped partial broadcast update

我想根据作用域路由将 ActiveRecord 的更新广播到不同的部分。我该怎么做?

例如:我有一个 Post 模型 has_many :comments。评论可以更新,我们在以下文件夹中为 comment 提供了两个部分,以使用不同的模板显示它们:

<%= turbo_stream_from comment %>
<%= turbo_frame_tag dom_id(comment) do %>
  //one way of displaying the comment
<% end %>
<%= turbo_stream_from comment %>
<%= turbo_frame_tag dom_id(comment) do %>
  //another way of displaying the comment
<% end %>

每次我更新记录时,它都会使用 turbo-stream 进行广播。

class Comment < ApplicationRecord
 broadcasts_to :post
end

问题是广播结果在整个应用程序中使用了 /views/comments/_comment.html.erb。 我想要一种方法,当视图在特定范围内时使用范围局部广播和重新呈现评论,并在未定义范围时使用非范围局部,这甚至可能吗?

我在 gem... 中找到了答案 这可以通过将访问者评论的 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