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