UnknownAttributeReference
是在未知和潛在不安全的變數傳遞給查詢方法時引發的。例如,將非欄位名稱變數傳遞給關聯的 order 方法可能會引發此例外狀況。
在解決此例外狀況時,應小心避免在將使用者提供的變數傳遞給查詢方法時出現 SQL 注入漏洞。可以透過將已知安全的變數封裝在 Arel.sql
中將其傳遞給查詢方法。
例如,下列程式碼會引發此例外狀況
Post.order("REPLACE(title, 'misc', 'zzzz') asc").pluck(:id)
可透過將已知安全的字串封裝在 Arel.sql
中來達成預期的結果
Post.order(Arel.sql("REPLACE(title, 'misc', 'zzzz') asc")).pluck(:id)
請再次注意,這種解決方法不應在將使用者提供的變數,例如要求參數或模型屬性傳遞給查詢方法時使用。