Turbo-rails 不同范围的部分广播更新
Turbo-rails distinct scoped partial broadcast update
我想根据作用域路由将 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
。
我想要一种方法,当视图在特定范围内时使用范围局部广播和重新呈现评论,并在未定义范围时使用非范围局部,这甚至可能吗?
我在 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
我想根据作用域路由将 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
。
我想要一种方法,当视图在特定范围内时使用范围局部广播和重新呈现评论,并在未定义范围时使用非范围局部,这甚至可能吗?
我在 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