跳至内容 跳至搜索

UnknownAttributeReference 当向查询方法传递未知且可能不安全的 value 时引发。 例如,将非列名 value 传递给关系的 order 方法可能会导致此异常。

在解决此异常时,应谨慎避免在将用户提供的 value 传递给查询方法时出现 SQL 注入漏洞。 已知安全 value 可以通过将其包装在 Arel.sql 中传递给查询方法。

例如,以下代码将引发此异常

Post.order("REPLACE(title, 'misc', 'zzzz') asc").pluck(:id)

可以通过将已知安全的字符串包装在 Arel.sql 中来实现预期结果

Post.order(Arel.sql("REPLACE(title, 'misc', 'zzzz') asc")).pluck(:id)

再次说明,在将用户提供的 value(例如请求参数或模型属性)传递给查询方法时,不应使用此类解决方法。