#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 для статьи ?