Rails / PostgreSQL:整数数组列中的查询值

时间:2015-09-20 09:58:42

标签: ruby-on-rails arrays postgresql

我对我或此查询有什么不妥?

我有一个带有开放日期列的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

我真的不明白。

1 个答案:

答案 0 :(得分:3)

  

默认情况下 PostgreSQL对数组使用基于一的编号约定,即n个元素的数组以array[1]开头,以array[n]结尾。

     

- Source

这只是你的榜样。您的索引超出范围,因此它不匹配任何记录,days[0]NULL。到处。点亮rails db并计算:

SELECT * FROM shops WHERE days[0] IS NULL;

&#34;默认情况下&#34; 是什么?是否可以在模式级别定义数组边界,这样这永远不会成为问题?

嗯......它的Rails&#39;我很害怕。如果它甚至被认为是&#34;问题&#34;一点都不为了使数组为零索引,它应该在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}"], ...]