我刚和同事讨论过,我们有一个嵌套路线:
/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
答案 0 :(得分:1)
GET
请求中,您不需要使用强参数,因为您只是查询数据库。
创建/更新记录时必须小心,例如:
Foo.create(params[:foo]) # Someone could just pass admin:true into the params
编辑:
更新的情况也很好。当您尝试通过键:foo_id
查找记录时,如果params哈希中有任何额外的键,则无关紧要。在进行质量对齐时需要强对数(在这种情况下调用update
)