我遇到了检查两个数组是否有一个或多个共同元素的查询。
由于查询是更大查询的一部分,我需要使用Arel来完成此任务。但是&&
运算符(称为重叠运算符)未在Arel gem中实现。
有一个postgres_ext gem实现上面提到的运算符并提供.overlap
方法,以便可以构建类似于我所做的查询:DiscountCondition.arel_table[:target_plan_period_ids].overlap(target_period_ids)
。这产生了一个适用于我的SQL where子句:"\"discount_conditions\".\"target_plan_period_ids\" && '{2}'"
。
但是。事情是我们的应用程序中的一些测试失败,出现以下错误:NoMethodError: undefined method 'array' for #<ActiveRecord::ConnectionAdapters::SQLite3Column:0x007f23c4995ba8>
(原来gem与某些适配器不兼容)。
一个简单的ActiveRecord
查询可以DiscountCondition.where('target_plan_period_ids && ARRAY[?]', target_period_ids)
生成以下SQL查询"SELECT \"discount_conditions\".\"discount_id\" FROM \"discount_conditions\" WHERE (target_plan_period_ids && ARRAY[2])"
。
所以,我想知道是否有人遇到过这个问题并成功解决了这个问题。
答案 0 :(得分:1)
万一有人遇到同样的问题,我最终monkey patching the aforementioned functionality postgres_ext
一个宝石进入项目。