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