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

Ruby on rails Rails/PostgreSQL:整数数组列中的查询值,ruby-on-rails,arrays,postgresql,Ruby On Rails,Arrays,Postgresql,我到底是怎么了,还是这个问题 我有一个带有开放日列的商店模型,这是一个整数数组,你可以用Postgres来做: days= [1,1,1,1,0,0,0] 当我询问: shops = Shop.where('days[0] = 1') 我得到一个空的ActiveRecord关系 => #<ActiveRecord::Relation []> 我明白了 我真的不明白 默认情况下,PostgreSQL对数组使用基于一的编号约定,即n个元素的数组以数组[1]开始,以数组[n]结

我到底是怎么了,还是这个问题

我有一个带有开放日列的商店模型,这是一个整数数组,你可以用Postgres来做:

days= [1,1,1,1,0,0,0]
当我询问:

shops = Shop.where('days[0] = 1')
我得到一个空的ActiveRecord关系

=> #<ActiveRecord::Relation []>
我明白了

我真的不明白

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

-

这只是你的例子。您的索引超出范围,因此它与任何记录都不匹配,天[0]为空。处处启动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}"], ...]

您是如何定义PG中的days列的?如下所示:t.integer:days,array:true,default:[1,1,1,1,1,1],这是它在我的数据库列中的外观:{1,1,1,1,1}。标题列是days integer[]Rails创建和执行的真正查询是什么?在控制台中检查输出,并在PG控制台上尝试。有效吗?查询是:从天[0]=1的店铺中选择店铺。*,答案是=>。我不知道如何使用PG控制台,所以我要检查一下;啊,这就解释了为什么昨天没有发生。Time.zone.now.wday=0今天!!!我正在研究是否可以将下限设置为0,因为这与Rails开发人员使用的大多数其他工具不一致。谢谢你,因为我的代码有一天是非常错误的。如果我有足够的名声,我会给你我欠你的。
SELECT * FROM shops WHERE days[0] IS NULL;
INSERT INTO shops
        (days,           created_at,        updated_at)
  values('[0:2]={1, 1, 0}', current_timestamp, current_timestamp);
 Shop.create(days: '[0:3]={6, 7, 8, 9}')
 > INSERT ... [["days", "{6,7,8,9}"], ...]