0

我想根据其作用域路由将 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 %>
  • /views/访客/comments/_comment.html.erb
<%= 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整个应用程序。我想要一种在视图位于特定范围内时使用范围部分广播和重新呈现评论的方法,并且在未定义范围时使用非范围部分,这甚至可能吗?

4

1 回答 1

0

我在 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
于 2022-02-07T17:57:54.500 回答