Как я могу восстановить этот запрос в ActiveRecord - PullRequest
2 голосов
/ 08 марта 2012

Я знаю, что это звучит как вопрос "сделай домашнее задание для меня", но я некоторое время пытался воссоздать этот запрос с ActiveRecord, и теперь мне интересно, возможно ли это сделать, не прибегая к использованию ActiveRecord::Base.connection.execute

Структура в основном:

Member has_many orders and transactions

Мне нужно отобразить всех участников, которые разместили заказ, общую сумму заказов и количество транзакций.для данного диапазона дат, упорядоченного по общей сумме.

Я могу получить нужные мне данные с помощью следующего запроса:

SELECT members.*,
SUM(orders.amount) AS total_amount,
COUNT(transactions.id) AS total_transactions 
FROM members 
INNER JOIN orders ON (orders.member_id = member.id) 
LEFT JOIN transactions ON (transactions.member_id = members.id)
WHERE orders.created_at BETWEEN "2012-03-01" AND "2012-04-01" 
GROUP BY member.id 
ORDER BY total_amount DESC

Можно ли сформулировать этот запрос через ActiveRecord?

1 Ответ

2 голосов
/ 08 марта 2012

Вот как я бы сделал это через ActiveRecord:

Member.includes(:orders, :transactions).select("SUM(orders.amount) as total_amount").where("orders.created_at BETWEEN '2012-03-01' AND '2012-04-01'").group('members.id').order('total_amount DESC')

Это включает в себя множество необработанных фрагментов SQL. Если вы хотите заменить их на настоящий код Ruby, вы можете сделать это, используя Creative.arel_table. См. документацию Arel для получения информации о том, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...