Ruby on rails Rails 4强参数:检查参数是否在白名单中,而不实际更新它

Ruby on rails Rails 4强参数:检查参数是否在白名单中,而不实际更新它,ruby-on-rails,strong-parameters,Ruby On Rails,Strong Parameters,我已经使用AJAX构建了一些在线编辑功能,允许用户更新页面上的大量少量信息,并构造JS在之后更新页面。同样的逻辑应该处理数十个不同的小表单,这些表单包含不同的属性或属性集(比如firstname和lastname)。在大多数情况下,更改的值与页面上要更新的值相同,因此编写Jquery调用以相应地更新内容很容易。然而,有时我想覆盖将要更新的内容:例如,当用户更改zipcode时,他们的城市和州也应该在之后显示 在这些情况下,我可以添加一个表单元素来指示页面上应该更新哪些字段。但是,当考虑安全性时,

我已经使用AJAX构建了一些在线编辑功能,允许用户更新页面上的大量少量信息,并构造JS在之后更新页面。同样的逻辑应该处理数十个不同的小表单,这些表单包含不同的属性或属性集(比如firstname和lastname)。在大多数情况下,更改的值与页面上要更新的值相同,因此编写Jquery调用以相应地更新内容很容易。然而,有时我想覆盖将要更新的内容:例如,当用户更改zipcode时,他们的城市和州也应该在之后显示

在这些情况下,我可以添加一个表单元素来指示页面上应该更新哪些字段。但是,当考虑安全性时,控制器逻辑变得复杂。我不希望用户能够更改表单元素以显示其任何属性;相反,我想检查给定属性是否在它们可以更新的属性的白名单中(强参数样式),然后使用该信息决定控制器是否允许该属性显示在页面上

强参数设置似乎不允许这样做。我可以检查user_params中是否存在一个参数,但如果我没有通过params散列为该属性提交新值,则该参数将被视为不在user_params中

是否有任何方法可以检查属性是否“在白名单上”,即是否会被用户参数接受,即使我们不尝试更改它


或者,您是否有其他方法来满足这一需求?

我将定义一个常数中允许的参数列表,然后检查

简言之:

# In your model object (e.g. MyModel)
PERMITTED_FIELDS = %w(field1 field2 field3)

# In your controller
def my_object_params
  params.require(:user).permit(MyModel::PERMITTED_FIELDS)
end

然后,您可以根据需要在其他地方访问
MyModel::allowed_字段。

Ah这将是完美的。我不知道许可证会接受数组。谢谢很高兴听到这个消息。注意:即使#permit不接受数组,您仍然可以从一个数组开始,然后使用
*
(基本上只是删除方括号):
.permit(*MyModel::permited_FIELDS)
。再次感谢。我在附近看过splat,但没怎么玩过。这帮了大忙!