在控制器的更新操作中,我有:
entry.update_attributes(params[:entry])
有一些键params[:entry]
对应于不可访问的字段,或者根本没有字段。如果我无法控制 中的值params[:entry]
,我该如何过滤它,以便只有相关模型的可访问字段保留在其中,大概是通过访问模型的白名单属性列表?我知道如何从哈希中排除/包含键,但我不想手动定义要包含/排除的键,因为当它已经在模型中定义时,我会复制白名单。
我正在使用 Rails 3.2.13。
在控制器的更新操作中,我有:
entry.update_attributes(params[:entry])
有一些键params[:entry]
对应于不可访问的字段,或者根本没有字段。如果我无法控制 中的值params[:entry]
,我该如何过滤它,以便只有相关模型的可访问字段保留在其中,大概是通过访问模型的白名单属性列表?我知道如何从哈希中排除/包含键,但我不想手动定义要包含/排除的键,因为当它已经在模型中定义时,我会复制白名单。
我正在使用 Rails 3.2.13。
http://apidock.com/rails/Hash/except
除了(*键)公共
返回一个包含除给定键之外的所有内容的哈希。这对于将一组参数限制为除少数已知切换之外的所有参数非常有用:
@person.update_attributes(params[:person].except(:admin))
它在 Rails 4 中的默认设置,所以你应该使用它:)
它也适用于 Rails 3:https ://github.com/rails/strong_parameters
对于那些寻求过滤哈希以使其只有一组选定的键的问题的答案的人,使用 Hash 的 rails slice 方法与模型的可访问属性一起工作。
@person.update_attributes(params[:person].only(*Person.attr_accessible[:default].to_a))
我认为可能有一种更简洁的方法可以做到这一点,欢迎提出建议。