是否通过密钥不安全直接从params哈希访问值?

时间:2014-11-12 15:04:00

标签: ruby-on-rails-4 strong-parameters

我刚和同事讨论过,我们有一个嵌套路线:

/foo/:foo_id/bar/:id(.:format)

在控制器中,我这样做:

Foo.find(params[:foo_id])

他说我应该通过强大的障碍获得foo_id,我不同意。我认为强大的参数是确保params中的数组不包含你没有指定的键,并且对值本身没有任何作用。

谁是对的?

编辑,并且在更新记录的情况下,是正确还是错误?所以,通过params获取id本身,然后使用强params作为属性数组。

Foo.find(params[:foo_id]).update(foo_params)

def foo_params
  params.require(:foo).permit(:attr_one, :attr_two, :attr_three)
end

1 个答案:

答案 0 :(得分:1)

你是对的。在GET请求中,您不需要使用强参数,因为您只是查询数据库。

创建/更新记录时必须小心,例如:

Foo.create(params[:foo]) # Someone could just pass admin:true into the params

编辑:

更新的情况也很好。当您尝试通过键:foo_id查找记录时,如果params哈希中有任何额外的键,则无关紧要。在进行质量对齐时需要强对数(在这种情况下调用update