UnknownAttributeReference 当一个未知且可能不安全的(unsafe)值被传递给查询方法时会被引发。例如,将非列名值传递给 relation 的 order 方法可能会导致此异常。
在处理此异常时,应谨慎避免在将用户提供的值传递给查询方法时出现 SQL 注入漏洞。可以通过用 Arel.sql 包装已知安全的值来将其传递给查询方法。
例如,以下代码将引发此异常
Post.order("REPLACE(title, 'misc', 'zzzz') asc").pluck(:id)
通过用 Arel.sql 包装已知安全(known-safe)的字符串,可以实现期望的结果
Post.order(Arel.sql("REPLACE(title, 'misc', 'zzzz') asc")).pluck(:id)
再次强调,在将用户提供的值(如请求参数或模型属性)传递给查询方法时,不应使用此类解决方法。