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