我正在使用 Sinatra,但我猜这也适用于 Rails(如果没有,请删除标签或让我知道,我将删除它)。
我有一个 ActiveRecord::Base 类User
。它有很多属性,我正在显示一个允许某人更新特定用户的页面。问题是,我很难以 DRY 方式实现更新功能。我的意思是,当我收到params
一个 POST 请求时,我可以这样做:
a_user.update_attributes params
因为 params 也包含其他一堆废话(比如:splat
- 那是什么?),它会抛出一个未知的属性错误。相反,我要做的是:
a_user.update_attributes {:attrA => params[:attrA],
:attrB => params[:attrB], ...etc }
(记住有很多属性)
这是我应该怎么做的吗?对我来说,出于某种原因……感觉不对。例如,如果我有另一个需要以类似方式更新的模型,我必须再次手动重写所有属性。
我正在寻找的是类似的东西:
a_user.filter_and_update_attributes params
其中 filter_and_update_attributes 自动过滤任何不良/未知属性的参数,我可以在任何模型的任何地方使用它,而必须重写这么多无用的代码。
谢谢