我对我或此查询有什么不妥?
我有一个带有开放日期列的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
我真的不明白。
答案 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}"], ...]