我有一个典型的博客应用程序,用户可以在其中发布来自 Posts#show 模板的评论。
resources :posts do
resources :comments
end
# posts_controller.rb
def show
@post = Post.find(params[:id])
@comment = @post.comments.build
end
# comments_controller.rb
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
@comment.author = current_user
if @comment.save
redirect_to @post
else
render 'posts/show'
end
end
在视图中,我首先检查是否有评论,输出它们,然后我正在显示一个新的评论表单。
/ posts/show.html.slim
- if @post.comments.any?
@post.comments.each do |comment|
p = comment.author.name
...
= form_for [@post, @comment]
如果评论验证失败,我会收到“nil 类没有方法名称”错误。我认为这是因为@post.commets.any?
返回 true,因为评论是通过帖子关联构建的——即使评论未通过验证并且没有保存。
你如何解决这个问题?