Как получить вложенные комментарии, созданные с помощью 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 %>
Другие вопросы по тегам