Ruby on Rails, найдите топ-5 пользователей по заказам - PullRequest
1 голос
/ 09 апреля 2011

У меня 2 модели, Пользователь и Покупка. A User has_many :purchases и Purchase belongs_to :user

Поля покупок:

id, product_id, user_id, amount, created_at

Я пытаюсь добиться вызова метода, такого как: User.top_five, что вернет 5 пользователей с наивысшей стоимостью покупки, т. Е. Сумму поля purchaseases.amount для каждого пользователя.

Я также хочу иметь возможность сделать что-то вроде User.top_five(:start_date=>'01/01/2010',:end_date=>'31/12/2010'), то есть выбрать период времени для расчета пяти лучших пользователей.

Так что я пытался получить правильную комбинацию объединений, сумм, order_bys и т. Д., Но я просто не понимаю. Так что, надеюсь, кто-то может указать мне правильное направление! Надеюсь, я дал достаточно информации, это мой первый вопрос.

спасибо

1 Ответ

3 голосов
/ 09 апреля 2011

Я предлагаю что-то вроде

def self.top_five(start_date, end_date)
  User.all(:select => "users.*, SUM(purchased.amount) as purchased_sum",
           :joins => "LEFT JOIN purchases AS purchased ON purchased.user_id = users.id",
           :group => "users.id",
           :conditions => ["purchased.created_at BETWEEN ? AND ?", start_date, end_date],
           :order => "purchased_sum DESC",
           :limit => 5)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...