ActiveModel::ForbiddenAttributesError
Extracted source (around line #3):
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create!(params[:comment])
redirect_to @post
end
Rails.root: C:/Users/ManU/Desktop/quick_blog
Application Trace | Framework Trace | Full Trace
app/controllers/comments_controller.rb:4:in `create'
我应该做些什么来处理这个错误......
答案 0 :(得分:5)
我有同样的错误,由于某种原因,他们删除了评论创建行上的.permit部分。如果您使用原始文件:
@comment = @post.comments.create(params[:comment].permit(:commenter, :body))
而不是新的:
@comment = @post.comments.create(params[:comment])
工作正常。所以该文件最终看起来像:
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
#@comment = @post.comments.create(params[:comment])
@comment = @post.comments.create(params[:comment].permit(:commenter, :body))
redirect_to post_path(@post)
end
def destroy
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
@comment.destroy
redirect_to post_path(@post)
end
end
答案 1 :(得分:1)
ForbiddenAttributesError与Strong Parameters
相关您在Rails3应用程序中安装了gem,或者您错过了标记问题并且您正在使用Rails4,其中默认情况下是gem。
无论哪种方式,使用强参数,参数检查都会离开模型并传递给控制器。
之前你在模型中有attr_accessible :foo, :bar
之类的东西,现在你需要像
def comment_params
params.permit(:foo, :bar)
end
在控制器中,然后调用Comment.create!(comment_params)
答案 2 :(得分:1)
希望这有效! (我得到了同样的错误,以下更改对我有用)
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment].permit(:commenter, :body))
redirect_to post_path(@post)
end