我在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字符串子句?
答案 0 :(得分:0)
如果我理解正确,你应该能够做到:
Model.where(field1: [113, 159, 111], field2: [2])
或者如果你有哈希,那么:
Model.where(field1: hash.keys, field2: hash.values)
请注意,这将返回field1等于任何散列键的所有记录,而field2等于任何散列值。如果您只需要查找与特定对匹配的字段,则无法使用。