使用Arel(Rails3)的嵌套查询

时间:2010-11-05 13:00:57

标签: sql ruby-on-rails orm nested arel

例如,我有2个模型:

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

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

在SQL中,我会这样写:

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

还有一个问题:是否有关于Arel的完整文档或书籍?

3 个答案:

答案 0 :(得分:2)

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

buyers=purchases.project(:buyer_id).group(purchases[:buyer_id]) #<-- all buyers
busers=users.where(users[:id].in(buyers))  #<--answer

答案 1 :(得分:0)

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

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

Rails API对于一些比较模糊的选项也非常有用。我只是用“rails api”谷歌一个特定的术语,它首先出现。

答案 2 :(得分:0)

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