使用Arel和数组属性在Rails中构造查询的问题

时间:2015-01-27 09:55:18

标签: ruby-on-rails arel rails-postgresql

我遇到了检查两个数组是否有一个或多个共同元素的查询。

由于查询是更大查询的一部分,我需要使用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])"

所以,我想知道是否有人遇到过这个问题并成功解决了这个问题。

1 个答案:

答案 0 :(得分:1)

万一有人遇到同样的问题,我最终monkey patching the aforementioned functionality postgres_ext一个宝石进入项目。