没有被禁止的属性错误。?

时间:2014-02-21 07:46:32

标签: ruby-on-rails

我正在使用rails4 and ruby2.0.0

当我这样做时

 def create
    @post  = Post.create(params[:post])
    redirect_to posts_path
 end

然后我得到forbidden attribute error,这没关系 - 我知道这种行为意味着我必须允许像params.require(:post).permit(:title,:content)这样的参数

但是当我这样做时

def create
    @post  = Post.create(:title=>params[:post][:title], :content=>params[:post][:content])
    redirect_to posts_path
end

它没有要求允许参数,即我没有得到任何禁止的属性错误,它将后记录保存在数据库中。

任何人都可以向我解释这个奇怪的行为,为什么第二个不需要参数允许?

1 个答案:

答案 0 :(得分:0)

这里的内容是 params 不仅仅是一个哈希,它是ActionController :: Parameters类的一个实例,它主要表现得像一个哈希,但也响应#permitted?方法,#required等。因此,当你打电话

Post.create(params[:post])

Rails内部调用#permitted?对params [:post]的方法,返回false,你得到禁止的属性错误。 但是当您从params手动提取属性时

 :title=>params[:post][:title], :content=>params[:post][:content]

你得到简单的Hash对象,它没有实现任何这样的行为,并且帖子被成功保存。

More in Rails documentation on ActionController::Parameters