UnknownAttributeReference
在將未知且可能有風險的值傳遞至查詢方法時引發。例如,將非欄位名稱值傳遞至關聯的順序方法可能會導致此例外狀況。
在解決此例外狀況時,在將使用者提供的值傳遞至查詢方法時,應小心避免 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)
再次強調,在將使用者提供的數值(例如要求參數或模型屬性)傳遞至查詢方法時,不應使用此類解決方法。