Ruby on rails 未获取禁止属性错误。?

Ruby on rails 未获取禁止属性错误。?,ruby-on-rails,Ruby On Rails,我正在使用rails4和ruby2.0.0 当我这样做的时候 def create @post = Post.create(params[:post]) redirect_to posts_path end 然后我得到了禁止的属性错误,这是正常的-我知道这种行为意味着我必须允许像params.require(:post.permit(:title,:content) 但当我这么做的时候 def create @post = Post.create(:title=

我正在使用
rails4和ruby2.0.0

当我这样做的时候

 def create
    @post  = Post.create(params[:post])
    redirect_to posts_path
 end
然后我得到了
禁止的属性错误
,这是正常的-我知道这种行为意味着我必须允许像
params.require(:post.permit(:title,:content)

但当我这么做的时候

def create
    @post  = Post.create(:title=>params[:post][:title], :content=>params[:post][:content])
    redirect_to posts_path
end
它不要求允许参数,也就是说,我没有得到任何禁止的属性错误,它将post记录保存在数据库中


有人能给我解释一下这种奇怪的行为吗,为什么第二个不需要params来允许?

这里的事情是,params不仅仅是一个散列,它是ActionController::Parameters类的一个实例,它的行为大部分类似于散列,但也响应#允许?方法、要求等。因此,当你打电话时

Post.create(params[:post])
Rails内部调用允许吗?方法,该方法返回false,您将得到禁止的属性错误。 但是当您手动从参数中提取属性时

 :title=>params[:post][:title], :content=>params[:post][:content]
您得到了简单的Hash对象,它没有实现任何这样的行为,并且帖子被成功保存