这是怎么回事:
def model1_params
params.require(:model1).permit(:key1, :key2)
end
这个更安全吗?
def model1_params
params.permit(:key1, :key2)
end
为什么需要require(:model1)
?
答案 0 :(得分:2)
它不是更安全,它只是一种将params组织成对象的方式。
如果你说params.require(:model).permit(:a)
期望这些参数以{ model: { a: <val> } }
的形式出现。这个嵌套哈希样式的命名空间是生成的脚手架的默认值,但是如果没有它,路由可以完美地工作(我暂时没有使用params.require
)。
安全参数的目的是阻止你做model.update(params)
这样不安全的事情,因为客户可以更新他们选择的任何属性,例如id。用于实现安全参数的<model>_params
方法基本上是过滤函数,它返回params
哈希的白名单版本。
因此您无需使用params.require
或params.permit
,如果您愿意,可以通过划痕编写:
def whitelisted_params
params.select { |key| key.in? [:my, :whitelisted, :params] }
end
答案 1 :(得分:0)
params.permit(:key1, :key2)
不安全。这是因为你直接允许params而不将它与一个对象相关联。
另一方面,params.require(:model1).permit(:key1, :key2)
更安全,因为您正在使用对象绑定密钥。