Ruby on rails Rails:具有相互依赖子集条件的ActiveRecord查询

Ruby on rails Rails:具有相互依赖子集条件的ActiveRecord查询,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,可以使用条件子集进行ActiveRecord查询。例如: Client.where(:orders_count => [1,3,5]) 假设您可以使用多个子集执行此操作: Client.where(:orders_count => [1,3,5], :location => ["Austin", "New York", "Chicago"]) 如果您希望这两个子集相互依存,比如多态关系,该怎么办 Client.where(:clientable_type => ["b

可以使用条件子集进行ActiveRecord查询。例如:

Client.where(:orders_count => [1,3,5])
假设您可以使用多个子集执行此操作:

Client.where(:orders_count => [1,3,5], :location => ["Austin", "New York", "Chicago"])
如果您希望这两个子集相互依存,比如多态关系,该怎么办

Client.where(:clientable_type => ["business", "charity", "business"], :clientable_id => [1, 1, 2])
因此,此查询将有效地查找
客户机。查找方式(:clientable\u type=>“business”、:clientable\u id=>1)
客户机。查找方式(:clientable\u type=>“charity”、:clientable\u id=>1)
客户机。查找方式(:clientable\u type=>“business”、:clientable\u id=>2)
。但不是,
Client.find_by(:clientable_type=>“charity”,:clientable_id=>2)
,因为它将链接每个数组中的第一个项目,然后是每个数组中的第二个项目,然后是第三个项目,依此类推


有可能编写这样的查询吗?

我可能不是100%正确,但我相信可以将两个
where
子句链接在一起。这方面的例子是

@person = Person.where(name: "David").where(age: 22)
执行此activerecord查询时,它还会发出另一个查询

因此,当执行上述acitverecord查询时,它将执行以下操作

SELECT name, age
FROM person
WHERE name = "David", 
AND age = "22";
因此,尽管如此,我相信您想要的问题如下:

@client = Client.where(:orders_count => [1,3,5].where
                                  (:location => ["Austin", "New York", "Chicago"]
我认为上面应该做的是检查位于奥斯汀、纽约和芝加哥的
订单数量为1,3,5的所有客户,并给出您的回复

更新

提供以下示例:

User.where(["name = :name and email = :email", { name: "Joe", email: "joe@example.com" }])
# SELECT * FROM users WHERE name = 'Joe' AND email = 'joe@example.com';
话虽如此,我还是得出以下结论:

Client.where(["orders_count = :orders_count and location = :location", 
       {orders_count  "1", "3", "5" location: "Austin", "New York", "Chicago"}])
因此,我相信SQL输出也将遵循以下原则

SELECT orders_count, location
FROM orders_count, location 
WHERE orders_count = "1, 3, 5", 
AND location = "Austin, New York, Chicago; 

谢谢这就是你所说的,尽管它和我所要求的(非常不明确)有些不同。我不希望通过1、3、5和奥斯汀、纽约、芝加哥的任何组合获得所有资源——我希望只获得满足这些条件的资源,并按给定顺序组合。例如,{1,奥斯汀}和{3,芝加哥}起作用,但不是{1,芝加哥}。对不起,我的问题不清楚。我怀疑这在ActiveRecord中是可能的。@timothythehuman如果我理解正确,你想将元素匹配到你的数组吗?实际上,我不确定你想做什么,但如果我更具体一些,你可以对我的意思有信心。在我的应用程序中,我有一个如下的条件哈希数组:[{followable_id:1,followable_type:“User”},{followable_id:5,followable_type:“Organization”}]。这些显然基于多态关系,尽管我不是查询多态对象(例如“用户”或“组织”),而是查询实际的多态表“Follow”。我试图找到数组中满足一组散列条件的所有“Follow”实例。