我正在構建一個 Rails 5.2 應用程式。我正在使用 Postgres。在這個應用程式中,我有一個用戶物件,在這個物件中我有一個 JSONB 列。
我需要能夠查詢 JSONB 物件中的特定屬性。
這就是我在用戶模型中定義它的方式:
serialize :preferences
store_accessor :preferences, PREFERENCES
這是物件的內容:
{"digest_is_active"=>true, "digest_frequency"=>"modal", "digest_time"=>"10:00"}
我試過這個:
scope :digest_active, -> { where("preferences @> ?", { "digest_is_active": true }.to_json) }
User.where("preferences->>'digest_time' = ?", "10:00")
查詢似乎運行沒有錯誤,但找不到用戶物件。
SELECT "users".* FROM "users" WHERE (preferences @> '{"digest_is_active":true}') LIMIT $1 [["LIMIT", 11]]
uj5u.com熱心網友回復:
不要這樣做:
serialize :preferences
這會將您的 Ruby 哈希編碼為 YAML 文本的 blob,然后該字串將進入您的jsonb列。字串是有效的 JSON,因此資料庫可以使用它,但它不會理解內部結構,因此資料庫的 JSON 運算子不會有太多用處。
從您的模型中洗掉serialize,修復任何現有資料,您的查詢應該會有更多的運氣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471093.html
上一篇:rubyonrails中的object&.an_attribute是什么意思?[復制]
下一篇:嵌套回圈內變數的范圍
