通过批量分配防止安全风险的官方方法是使用attr_accessible。然而,一些程序员认为这不是模型的工作(或者至少不仅仅是模型)。在控制器中执行此操作的最简单方法是切片params哈希:
@user = User.update_attributes(params[:user].slice(:name))
但是文档指出:
请注意,使用 Hash#except 或 Hash#slice 代替 attr_accessible 来清理属性不会提供足够的保护。
这是为什么?为什么白名单切片参数不能提供足够的保护?
更新: Rails 4.0 将发布 strong-parameters,一个精细的参数切片,所以我想整个切片的事情毕竟不是那么糟糕。