这个问题没有指定答案必须来自ActiveRecord,也没有指定应该是哪个版本的Rails。出于这个原因(并且因为它是顶级和少数几个)关于如何清理 Rails 中的参数的答案......
这里有一个适用于 Rails 4 的解决方案:
在ActiveRecord::Sanitization::ClassMethods 中有sanitize_sql_for_conditions 及其另外两个别名:
sanitize_conditions 和 sanitize_sql。这三个人做着完全相同的事情。
sanitize_sql_for_conditions
接受一个数组、散列或 SQL 条件字符串并清理
将它们放入一个有效的 SQL 片段中用于 WHERE 子句。
在 ActiveRecord 中你也有
sanitize_sql_for_assignment哪个
接受一个数组、散列或 SQL 条件字符串并对其进行清理
用于 SET 子句的有效 SQL 片段。
- 上述方法默认包含在 ActiveRecord::Base 中,因此包含在任何 ActiveRecord 模型中。
见docs
不过,在 ActionController 中,您有 ActionController::Parameters,它允许您
选择哪些属性应该被列入白名单以进行大规模更新和
从而防止意外暴露不应该暴露的东西。
为此提供了两种方法:require 和 permit。
params = ActionController::Parameters.new(user: { name: 'Bryan', age: 21 })
req = params.require(:user) # will throw exception if user not present
opt = params.permit(:name) # name parameter is optional, returns nil if not present
user = params.require(:user).permit(:name, :age) # user hash is required while `name` and `age` keys are optional
“参数魔法”称为强参数 (docs here),您可以使用它在控制器中清理参数,然后再将其发送到模型。
- 上述方法默认包含在
ActionController::Base 中,因此包含在任何 Rails 控制器中。
我希望这对任何人都有帮助,哪怕只是为了学习和揭开 Rails 的神秘面纱! :)