User.where(is_individual: true)
.includes(:visitor)
.where(visitors: { finished: false })
.where(visitors: { step > 2 })
我試圖擺脫上述查詢,但它回傳錯誤
syntax error, unexpected '}', expecting =>)
...visitors: { step > 2 })
但是,如果我按照以下方式進行操作,則可以。
User.where(is_individual: true)
.includes(:visitor)
.where(visitors: { finished: false })
.where(visitors: { step: 2 })
因此查詢不適用于大于運算子。
我什至嘗試了以下查詢,但它仍然無法正常作業
User.where(is_individual: true)
.includes(:visitor)
.where(visitors: { finished: false })
.where(visitors: { "step > ?", 2 })
uj5u.com熱心網友回復:
您遇到的語法錯誤是由于傳遞給最后一個where子句的引數結構 -{ "step > ?", 2 }不是有效的 Ruby 物件。
如果使用 Ruby 2.6 或更高版本,您可以利用其無限范圍語法來構造查詢:
User
.includes(:visitor)
.where(is_individual: true, visitors: { finished: false, step: 3.. })
如果使用 Ruby 2.5 或更低版本,您可以使用以下命令生成相同的查詢Float::INFINITY:
User
.includes(:visitor)
.where(is_individual: true, visitors: { finished: false, step: 3..Float::INFINITY })
或者,您可以傳遞一個 SQL 字串來where查詢包含的模型(您需要通過references參考關聯的表):
User
.includes(:visitor)
.references(:visitors)
.where(is_individual: true)
.where(visitors: { finished: false })
.where("visitors.step > ?", 2)
在這種情況下,您還可以顯式使用joins來檢索所需的結果:
User
.joins(:visitor)
.where(is_individual: true)
.where(visitors: { finished: false })
.where("visitors.step > ?", 2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431897.html
標籤:轨道上的红宝石 红宝石 ruby-on-rails-5
