跳至内容 跳至搜索

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(例如请求参数或模型属性)传递给查询方法时,不应使用这种解决方法。