使用 form_for([@ post,@ comment])向评论控制台发送帖子请求时收到错误。要创建评论。
ActiveModel::ForbiddenAttributesError in CommentsController#create
导致错误的行:
@comment = @post.comments.build(params[:comment])
我知道这是一个强大的参数问题,但我似乎无法做到正确。目前我的帖子模型是:
posts.rb
class Post < ActiveRecord::Base
has_many :comments, dependent: :destroy
end
评论:
comment.rb
class Comment < ActiveRecord::Base
belongs_to :post
end
我当前为评论控制器设置的强参数是:
comments_controller.rb
private
def comment_params
params.require(:post).permit(comment: [:name, :body])
end
最后,错误消息报告的参数是:
{"utf8"=>"✓",
"authenticity_token"=>"MSX1PrrvfzYBr/DNYaMgSw3opWmaJs82xd11JfLPIqI=",
"comment"=>{"name"=>"",
"body"=>""},
"commit"=>"Create Comment",
"post_id"=>"1"}
任何人都有任何想法,我的强大的params设置被打破 - 任何想法将不胜感激。谢谢!
答案 0 :(得分:2)
在你的控制器中,你需要你的帖子,而不是你的评论。也许试试:
def comment_params
params.require(:comment).permit(:name, :body)
end
然后做:
@comment = @post.comments.build(comment_params)
看看是否有帮助。
答案 1 :(得分:1)
有几个问题......
一个问题是您没有在comment_params
方法中使用build
...
@comment = @post.comments.build(params[:comment])
应该是
@comment = @post.comments.build(comment_params[:comment])
但我们还有另一个问题,即您发送的params
实际上不是{post: {comment: 'stuff here'}}
方法所指示的comment_params
。它实际上是{comment: 'stuff here'}
所以你应该改变评论参数:
def comment_params
params.require(:comment).permit(:name, :body)
end
然后建立你的评论:
@comment = @post.comments.build(comment_params)