«Родитель должен существовать» и «Не найден шаблон для CommentsController # create, рендеринг head: no_content» Rails 5 - PullRequest
0 голосов
/ 26 марта 2019

Я получаю странную ошибку с формой "Новый комментарий".

Во-первых, когда я отправляю комментарий, я получаю всплывающее окно для сохранения файла (нет файла для сохранения).

chrome popup Однако комментарий не создается, потому что мое приложение считает, что один из атрибутов комментария должен существовать, когда это не нужно.

Это моя ошибка при отправке:

errors: ["Parent must exist"]
No template found for Events::CommentsController#create, rendering head :no_content

(Однако, когда вы отправляете комментарий с заголовком, он работает как положено)

comments_controller.rb

  def create
    @comment = @commentable.comments.build(comment_params)
    if @comment.save
      flash[:success] = "Your comment was successfully saved."
      redirect_to @commentable
    else
      puts "errors: #{@comment.errors.full_messages}"
      flash[:danger] = "Uh Oh"
    end
  end

schema.rb

  create_table "comments", force: :cascade do |t|
    t.integer "parent_id"
    t.string "commentable_type"
    t.bigint "commentable_id"
  end

comment.rb

class Comment < ApplicationRecord
  belongs_to :commentable, polymorphic: true

  belongs_to :parent, class_name: "Comment"
  has_many :children, class_name: "Comment", foreign_key: :parent_id, dependent: :destroy
end

new_comment_form.html.erb

<%= form_for [commentable, Comment.new] do |f| %>
  <div class="form-group">
    <div class="col-6">
      <%= f.text_area :body, class: "form-control", placeholder: "", style: "height: 200px;" %>
    </div>
  </div>
  <div class="form-group">
    <div class="col-3">
      <%= f.submit "add comment", class: "btn btn-light ", id: "submit-comment" %>
    </div>
  </div>
<% end %>

1 Ответ

1 голос
/ 26 марта 2019

Rails 5 делает belongs_to обязательным объединение по умолчанию - об этом есть отличная статья здесь .

По сути, вам просто нужно пометить ваше отношение belongs_to как необязательное:

belongs_to :parent, class_name: "Comment", optional: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...