Создайте объект с несколькими ассоциациями в ruby on rails

#ruby-on-rails

#ruby-on-rails

Вопрос:

У меня есть 3 объекта: статья, комментарий и пользователь, я хочу, чтобы при публикации комментария с формой комментарий был связан со статьей И пользователем.

Когда у меня была только статья и комментарий, это было идеально: мы могли отправить форму, создать комментарий, и он был показан.

Форма комментария :

 <%= form_with(model: [ @article, @article.comments.build ], local: true) do |form| %>
    <p>
      <%= form.label :body %><br>
      <%= form.text_area(:body, {:class => 'form-control'} ) %>
    </p>
    <p>
      <%= form.submit({:class => 'btn btn-success'}) %>
    </p>
<% end %>
  

Создайте метод CommentsController :

 before_action :authenticate_user!
def create
    @article = Article.find(params[:article_id])
    @comment = @article.comments.build(comment_params)
    @comment.commenter = current_user
    @comment.save
    redirect_to article_path(@article)
end
  

И модели :

 class Comment < ApplicationRecord
  belongs_to :article
  belongs_to :user
end

class User < ApplicationRecord
  has_many :comments, dependent: :destroy
  # Some devise things
end

class Comment < ApplicationRecord
  belongs_to :article
  belongs_to :user
end
  

Я хочу, чтобы комментарий был помещен в базу данных, но фактический результат — ничего не сделано: комментарий просто игнорируется, и я не знаю почему. Я уже искал здесь, я нашел тему с аналогичной проблемой, но решением был мой фактический код.

Комментарии:

1. Попробуйте с @comment.save! с ! в конце, чтобы вызвать исключение, если есть какая-либо проверка, препятствующая сохранению вашего объекта. Обратите внимание, что вы использовали @comment.commenter = , а связь user нет commenter .

2. Вам нужно добавить условие в свой контроллер, которое проверяет, @comment.save возвращает ли оно значение true. Вы не можете просто предположить, что он всегда будет действительным.

3. Можете ли вы еще раз проверить, есть ли у вас отношение has_many и для Article?

4. @arieljuod Я добавляю !, и теперь он вызывает «ActiveRecord::RecordInvalid» с «Ошибка проверки: пользователь должен существовать». Но пользователь существует, я знаю это, потому что я вошел в систему с ним, и для входа с пользователем я ищу его в базе данных. Я даже пытался получить пользователя в базе данных с электронной почтой текущего пользователя, поместить его в комментарий, но исключение все равно выдается.

5. @Surya да, у меня есть отношение has_many в статье для комментариев, но отношение has_many для статьи ?