В рельсах, как я могу создать следующий запрос в рельсах? Я знаю, как написать это в SQL. Я бы знал, если это возможно с помощью рельсов.
Следующий код:
one_day_ago = 1.days.ago.at_beginning_of_day;
Client.joins(:user => {:cart => [:cart_items, :saved_items]}).where('cart_items.created_at > ?', one_day_ago).group('clients.user_id')
Приведенный выше код создает следующий запрос:
SELECT `clients`.* FROM `clients`
INNER JOIN `users` ON `users`.`id` = `clients`.`user_id`
INNER JOIN `carts` ON `carts`.`user_id` = `users`.`id`
INNER JOIN `cart_items` ON `cart_items`.`cart_id` = `carts`.`id`
AND `cart_items`.`type` IN ('CartItem')
INNER JOIN `cart_items` `saved_items_carts` ON `saved_items_carts`.`cart_id` = `carts`.`id`
AND `saved_items_carts`.`type` IN ('SavedItem')
WHERE (cart_items.created_at > '2019-03-31 04:00:00.000000') GROUP BY clients.user_id
Как я могу получить рельсы для создания запроса, подобного этому:
ВЫБРАТЬ clients
. * ОТ clients
ВНУТРЕННЕЕ СОЕДИНЕНИЕ users
ВКЛ users
. id
= clients
. user_id
INNER JOIN carts
ON carts
. user_id
= users
. id
INNER JOIN cart_items
ON cart_items
. cart_id
= carts
. id
ГДЕ (cart_items.created_at> '2019-03-31 04: 00: 00.000000'
И cart_items.type IN ('SavedItem', 'CartItem')) GROUP BY clients.user_id