2015-09-20 21 views
1

我或我的這個查詢有什麼問題?Rails/PostgreSQL:整數數組列中的查詢值

我有一個開放日的列,這是一個整數數組(你可以用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 

我真的不明白它。

+0

你怎麼定義'在PG days'列? –

+0

像這樣:'t.integer:days,array:true,default:[1,1,1,1,1,1,1]' – Sebabouche

+0

這就是它在我的數據庫列中的樣子:'{1 ,1,1,1,1,1,1}'。而標題列是天整數[] – Sebabouche

回答

3

默認 PostgreSQL使用一個基於一個編號慣例爲陣列,即,n個元素的陣列開始與array[1]並用array[n]結束。

Source

這只是你的榜樣。您的索引超出範圍,因此它不符合任何記錄,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}"], ...] 
+0

啊,這就解釋了爲什麼昨天沒有發生^^。 Time.zone.now.wday = 0今天! – Sebabouche

+0

我正在研究是否可以將下限設置爲0,因爲這與Rails開發人員使用的大多數其他工具不一致。 –

+0

謝謝你,因爲我的代碼有一天是錯誤的。如果我有足夠的聲譽,我會授予你我欠你的那一個。 – Sebabouche