![](/img/trans.png)
[英]Rails 4 / postgresql 9.4 - Query and update a ruby object inside an array
[英]Rails/PostgreSQL : query value inside an integer array column
我錯了我或這個查詢?
我有一個帶有開放日期列的Shop模型,這是一個整數數組(你可以用Postgres做的事情):
days= [1,1,1,1,0,0,0]
當我查詢時:
shops = Shop.where('days[0] = 1')
我得到一個空的ActiveRecord關系。
=> #<ActiveRecord::Relation []>
當我帶這種陣列的商店...
shop = Shop.first
=> #<Shop id: 215, days: [1, 1, 1, 1, 0, 0, 0],…
如果我做
shop.days[0]
我明白了
=> 1
我真的不明白。
默認情況下, PostgreSQL對數組使用一種基於編號的約定,即n個元素的數組以
array[1]
開頭,以array[n]
結尾。- 來源
這只是你的榜樣。 您的索引超出范圍,因此它與任何記錄都不匹配, days[0]
為NULL
。 到處。 啟動rails db
並計算:
SELECT * FROM shops WHERE days[0] IS NULL;
但是“默認情況下”是什么? 是否可以在模式級別定義數組邊界,這樣這永遠不會成為問題?
嗯......這是Rails的錯,我很害怕。 如果它甚至被認為是一個“問題”。 為了使數組為零索引,它應該在SQL中保存。 我在SQL中試過它,它的工作原理是:
INSERT INTO shops
(days, created_at, updated_at)
values('[0:2]={1, 1, 0}', current_timestamp, current_timestamp);
不幸的是,Rails由於某種原因失去了界限:
Shop.create(days: '[0:3]={6, 7, 8, 9}')
> INSERT ... [["days", "{6,7,8,9}"], ...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.