1

例如,我有 2 个模型:

购买 (belongs_to :users) 用户 (has_many :purchases)

我想选择至少有一次购买的所有用户。

在 SQL 中,我会这样写:

SELECT * FROM `users` WHERE `id` IN (SELECT DISTINCT `buyer_id` FROM  `purchases`)

还有一个问题:是否有任何涵盖 Arel 的完整文档或书籍?

4

3 回答 3

2

嗯,我想回答我的问题... :)

buyers=purchases.project(:buyer_id).group(purchases[:buyer_id]) #<-- all buyers
busers=users.where(users[:id].in(buyers))  #<--answer
于 2010-11-05T14:19:09.317 回答
0

我不相信上面的代码会发出嵌套查询。相反,它似乎会发出 2 个单独的 SQL 查询。您可能具有相当的速度(取决于您对性能的关注程度),但是对于服务器的 2 次往返,它不能提供与嵌套查询相同的好处。

于 2011-10-03T15:30:42.343 回答
0

Rails 指南为 ARel 提供了非常好的文档。

http://guides.rubyonrails.org/active_record_querying.html#conditions

Rails API 对于一些更晦涩的选项也非常有用。我只是用“rails api”搜索了一个特定的术语,它首先出现。

于 2010-11-05T16:03:37.740 回答