1

可以使用条件子集进行 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])

因此,此查询将有效地查找Client.find_by(:clientable_type => "business", :clientable_id => 1)Client.find_by(:clientable_type => "charity", :clientable_id => 1)Client.find_by(:clientable_type => "business", :clientable_id => 2)。但不是,Client.find_by(:clientable_type => "charity", :clientable_id => 2)因为它会链接每个数组中的第一项,然后是每个数组中的第二项,然后是第三项,依此类推。

是否可以编写这样的查询?

4

1 回答 1

0

我可能不是 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"]

我认为上面应该做的是检查orders_cont奥斯汀、纽约和芝加哥位置为 1、3、5 的所有客户,并给您答复。

更新

API Ruby on Rails - Where提供以下示例:

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; 
于 2013-06-26T01:39:17.027 回答