Rails:使用配对值数组查询复合字段

时间:2016-11-19 21:14:27

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-4.2

我在Rails 4.2中(但很高兴知道Rails 5是否做了4不做的事情),并试图产生一个SQL查询(至少在Postgres中工作),如下所示:

SELECT "mytable".* FROM "mytable" WHERE ((field1, field2) IN ((113, 2), (159, 1), (111, 3))

我知道如果这是一个简单的数组查询:

SELECT "mytable".* FROM "mytable" WHERE field1 IN (113, 159, 111)

我会在Rails中写这个:

where(field1: [113, 159, 111])

和Rails / AREL会为我生成WHERE...IN查询(因此处理数据库引擎差异)。

我当然可以这样做以获得我想要的效果:

where("(field1, field2) IN ((113, 2), (159, 1), (111, 3))")

但是并没有真正利用Rails技术。

如果合适,我可以将我的目标值结构化为Hash或数组数组(或其他任何内容),但是有一种Rails方法可以执行此复合字段查询不带求助于where方法的硬编码SQL字符串子句?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你应该能够做到:

Model.where(field1: [113, 159, 111], field2: [2])

或者如果你有哈希,那么:

Model.where(field1: hash.keys, field2: hash.values)

请注意,这将返回field1等于任何散列键的所有记录,而field2等于任何散列值。如果您只需要查找与特定对匹配的字段,则无法使用。