跳至內容 跳至搜尋

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)

請再次注意,這種解決方法不應在將使用者提供的變數,例如要求參數或模型屬性傳遞給查詢方法時使用。