- 你好,我对涡轮流和帧相对较新,我目前面临着使用涡轮帧和流渲染回复评论的问题。
让我来解释一下我的设置。我有一个Comment模型,我利用同一个表来包含评论和它们各自的回复。
- 下面是
comment.rb
class Comment < ApplicationRecord
belongs_to :post
belongs_to :user
has_many :likes, as: :likeable
scope :ordered, -> { order(id: :desc) }
belongs_to :parent, class_name: 'Comment', optional: true
has_many :replies, class_name: 'Comment', foreign_key: :parent_id, dependent: :destroy
validates :body, presence: true
end
字符串
- 下面是我的帖子显示页面,在那里我想渲染评论所有的评论
<%= turbo_frame_tag "comments" do%>
<%= render @comments, post: @post, comment: @comment %>
<% end %>
型
- 下面是我的评论部分,我希望每个父评论都有递归嵌套的回复
<%= turbo_frame_tag comment do%>
<div class="">
<p class="mt-4 text-gray-500 dark:text-gray-400"><%= comment.body %></p>
</div>
<%= turbo_frame_tag dom_id(Comment.new) do%>
<%= render "comments/like_button", comment: comment%>
<% end %>
<% if comment.replies.any? %>
<% comment.replies.each do |reply| %>
<div class="ml-4">
<%= turbo_frame_tag nested_dom_id(comment, "replies") do%>
<%= render 'comments/comment', comment: reply %>
<% end %>
</div>
<% end %>
<% end %>
</div>
<% end %>
型app/views/comments/create_turbo.stream.erb
的
<%= turbo_stream.update Comment.new, "" %>
<% if @comment.parent_id.nil? %>
<%= turbo_stream.prepend "comments", @comment%>
<% else %>
<% @comment.replies.each do |reply| %>
<%= turbo_stream.prepend nested_dom_id(@comment, "replies") do%>
<%= render 'comments/comment', comment: reply %>
<% end %>
<% end %>
<% end %>
型
- 问题是,只有在我手动刷新页面后,子评论才会显示良好的嵌套,这不是我想要的情况。我想要的是,当我创建回复时,我希望它在父评论下呈现,而不刷新页面。
- 任何帮助将不胜感激
2条答案
按热度按时间i7uaboj41#
就像这样:
注意,turbo-rails
v1.5.0
更新了turbo_frame_tag
以生成与dom_id
相同的id:在
v1.5.0
之前,你可以这样做:型
测试结果:
x1c 0d1x的数据
型
qmb5sa222#
<% if @comment.parent_id.nil? %>
<%= turbo_stream.prepend "comments" do %>
<%= render @comment %>
<% end %>
<% else %>
<%= turbo_stream.after dom_id(@comment.parent) do %>
<%= render @comment %>
<% end %>
<% end %>
字符串