不确定为什么在_comment_form.html.erb上创建的评论未在文章/:id
上呈现我正在引用此youtube教程:https://www.youtube.com/watch?v=IUUThhcGtzc
评论控制员:
class CommentsController < ApplicationController
before_action :authenticate_user!
before_action :set_article
def create
@comment = @article.comments.create(params[:comment].permit(:content, :article_id, :user_id))
@comment.user = current_user
@comment.save
if @comment.save
redirect_to @article
else
redirect_to @article
end
end
private
def set_article
@article = Article.find(params[:article_id])
end
end
文章控制者:
class ArticlesController < ApplicationController
before_action :authenticate_user!, except: [:index, :show]
before_action :set_article, only: [:show, :edit, :update, :destroy]
def show
@comments = Comment.where(article_id: @article).order("created_at DESC")
end
private
def set_article
@article = Article.find(params[:id])
end
end
_comment.html.erb(来自articles / show.html.erb)
<%= render 'comments/comment_form' %>
<% @comments.each do |comment| %>
<%= comment.content %>
<% end %>
_comment_form.html.erb
<% if user_signed_in? %>
<%= form_for ([@article, @article.comments.build]) do |f| %>
<div class="form-group">
<%= f.label :content %>
<%= f.text_area :content, class: 'form-control' %>
</div>
<%= f.submit 'Post Comment', class: 'btn btn-primary' %>
<% end %>
<% end %>
的routes.rb
resources :articles do
resources :comments
end
答案 0 :(得分:0)
我想做的一些考虑因素:
@comment.save
if @comment.save
当你这样做时,你会节省两次。调用@comment.save
if条件是否已保存文章,如果成功则返回true
或false
。另外,将.save
替换为.save!
,因此如果不保存则会引发异常,因此您可以在rails服务器日志中检查原因。
另外,认为没必要这样做:
@comments = Comment.where(article_id: @article).order("created_at DESC")
由于您已经设置了@article
,因此您可以在文章模型上放置@article.comments
后访问has_many :comments
。
如果文章创建正确,您还可以在rails控制台上查看。创建一个新的,并将其设置为article = Article.last
,然后您可以检查article.comments
。
希望这有帮助!