2010-11-05 2 views
1

К примеру, у меня есть 2 модели:Вложенные запросы с использованием Arel (Rails3)

Покупка (BELONGS_TO: пользователи) пользователь (HAS_MANY: покупки)

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

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

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

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

ответ

2

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

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

Руководство Rails имеет очень хорошую документацию для AREL.

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

Рельсы API также очень полезно для некоторых из более неясных вариантов. Я просто говорю о конкретном термине с «rails api», и он появляется первым.

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^