Вложенные запросы с использованием Arel (Rails3) - PullRequest
1 голос
/ 05 ноября 2010

Например, у меня есть 2 модели:

Покупка (принадлежит: пользователям) Пользователь (has_many: покупки)

Я хочу выбрать всех пользователей, у которых есть хотя бы одна покупка.

В SQL я написал бы так:

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

И еще один вопрос: есть ли полная документация или книга, которая охватывает Арель?

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

Хм, я бы хотел ответить на мой вопрос ...:)

buyers=purchases.project(:buyer_id).group(purchases[:buyer_id]) #<-- all buyers
busers=users.where(users[:id].in(buyers))  #<--answer
0 голосов
/ 03 октября 2011

Я не верю, что приведенный выше код выдает вложенный запрос.Вместо этого кажется, что он выдаст 2 отдельных запроса SQL.Вы можете иметь сравнимую скорость (в зависимости от того, насколько вы обеспокоены производительностью), но при двухразовых обращениях к серверу он не дает тех же преимуществ вложенных запросов.

0 голосов
/ 05 ноября 2010

В Rails Guide есть действительно хорошая документация для ARel.

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

Rails API также довольно полезен для некоторых более неясных опций. Я просто ввел в Google определенный термин с "rails api", и он появился первым.

...