0

在控制器的更新操作中,我有:

entry.update_attributes(params[:entry])

有一些键params[:entry]对应于不可访问的字段,或者根本没有字段。如果我无法控制 中的值params[:entry],我该如何过滤它,以便只有相关模型的可访问字段保留在其中,大概是通过访问模型的白名单属性列表?我知道如何从哈希中排除/包含键,但我不想手动定义要包含/排除的键,因为当它已经在模型中定义时,我会复制白名单。

我正在使用 Rails 3.2.13。

4

3 回答 3

2

http://apidock.com/rails/Hash/except

除了(*键)公共

返回一个包含除给定键之外的所有内容的哈希。这对于将一组参数限制为除少数已知切换之外的所有参数非常有用:

@person.update_attributes(params[:person].except(:admin))
于 2013-07-08T15:20:48.373 回答
1

它在 Rails 4 中的默认设置,所以你应该使用它:)

它也适用于 Rails 3:https ://github.com/rails/strong_parameters

于 2013-07-08T15:49:55.310 回答
1

对于那些寻求过滤哈希以使其只有一组选定的键的问题的答案的人,使用 Hash 的 rails slice 方法与模型的可访问属性一起工作。

@person.update_attributes(params[:person].only(*Person.attr_accessible[:default]‌​.to_a))

我认为可能有一种更简洁的方法可以做到这一点,欢迎提出建议。

于 2013-10-28T05:43:51.540 回答