Как получить вложенные комментарии, созданные с помощью ActionText (Trix Editor), для отображения в проекте rails?
Мои комментарии второго уровня, созданные с помощью ActionText / Trix Editor, не отображаются в моем приложении rails. Оригинальный пост отображается нормально, как и комментарии первого уровня. Но комментарии к комментариям не будут отображаться.
Я создал приложение с использованием Rails 6, в котором есть посты и вложенные комментарии. Посты и комментарии работают на стороне базы данных вещей. Однако после того, как я установил ActionText, я мог позволить пользователям публиковать и комментировать, используя расширенный текст, только комментарии постов и первого уровня отображают свое основное содержание.
Сообщения и комментарии первого уровня отображают post.body и comment.body, заключенные в div "trix-content". Однако вывод вложенного комментария второго уровня, похоже, не захватывает comment.body.
Comment Model Code:
class Comment < ApplicationRecord
has_rich_text :body
belongs_to :user
belongs_to :commentable, polymorphic: true
belongs_to :parent, optional: true, class_name: "Comment"
def comments
Comment.where(commentable: commentable, parent_id: id)
end
end
Comment Controller Code:
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
@comment = @commentable.comments.new(comment_params)
@comment.user = current_user
if @comment.save
redirect_to @commentable, notice: "Comment was successfully created."
else
redirect_to @commentable, alert: "Something went wrong"
end
end
def destroy
@comment = @commentable.comments.find(params[:id])
@comment.destroy
redirect_to @commentable
end
private
def comment_params
params.require(:comment).permit(:body, :parent_id)
end
end
Comment Form Code:
<%= form_with model: [commentable, Comment.new], local: true, html: { class: local_assigns[:class], data: { target: local_assigns[:target]}} do |form| %>
<div class="form-group">
<%= form.rich_text_area :body, placeholder: "Add a comment", class: "form-control" %>
</div>
<div class="form-group">
<%= form.hidden_field :parent_id, value: local_assigns[:parent_id] %>
<%= form.submit class: "btn btn-primary" %>
</div>
<% end %>
Comment View/Show Page Code:
<% nesting = local_assigns.fetch(:nesting, 1) %>
<% max_nesting = local_assigns[:max_nesting] %>
<div <div class="col-lg-3">
</div>
<div class="col-lg-7">
<ul class="media-list media-list-stream mb-2">
<li class="media list-group-item mb-2">
<img class="mr-0">
<%= image_tag user_avatar(comment.user, 60), class: "rounded-circle" %>
</img>
<div class="media-body">
<div class="media-heading">
<small class="float-right text-muted"> <%= comment.created_at.strftime("%b %e, %Y") %> </small>
<h6 class="ml-3"><%= comment.user.name %></h6>
</div>
<div class="media ml-3">
<p><%= comment.body %></p>
</div>
<div class="media-footer ml-3">
<div data-controller="reply">
<small>
<%= link_to "Reply", "#", data: { action: "click->reply#toggle" } %>
<%= link_to "Delete", [comment.commentable, comment], method: :delete, data: {confirm: "Are you sure?"} if comment.user == current_user%>
</small>
<%= render partial: "comments/form", locals: {
commentable: comment.commentable,
parent_id: reply_to_comment_id(comment, nesting, max_nesting),
class: "d-none",
target: "reply.form"
} %>
</div>
</div>
</div>
</li>
<%= render comment.comments, nesting: nesting + 1, max_nesting: local_assigns[:max_nesting] %>
</ul>
</div>
Я подозреваю, что проблема связана с ассоциацией комментариев к комментариям, потому что, когда я удаляю вложение и комментирую комментарий, я вижу тот же результат. Похоже, кто-то оставил пустой комментарий.
1 ответ
Итак, Крис Оливер из GoRails помог мне решить эту проблему. Мне пришлось добавить идентификатор ввода для каждой формы редактора Trix. По сути, Rails неправильно распознавал формы комментариев второго уровня.
Все, что мне нужно было сделать, было примерно так:
<%= form.rich_text_area :body, placeholder: "Add a comment", class: "form-control", id: form.object.object_id %>