我正在使用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
它没有要求允许参数,即我没有得到任何禁止的属性错误,它将后记录保存在数据库中。
任何人都可以向我解释这个奇怪的行为,为什么第二个不需要参数允许?
答案 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对象,它没有实现任何这样的行为,并且帖子被成功保存。