2015-12-29 3 views
1

Я строю базовую функциональность списка ожиданий для моего проекта.Найти ранжирование записей на основе 2 столбцов

У меня есть модель под названием «Подписчики», которая имеет 2 столбца: «точки» и «created_at». Created_at, очевидно, генерируется, когда запись создается, а точки - целое число, начинающееся с 1.

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

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

Сложность состоит в том, что я не просто подсчитываю пользователей с большим количеством баллов, но также и пользователей, которые зарегистрировались ПОСЛЕ конкретного пользователя, которого я запрашиваю. Я должен избегать того, что пользователи с одинаковыми точками конкретного пользователя, но которые зарегистрировались намного позже, в конечном итоге впереди.

WaitingList модель

class WaitingList < ActiveRecord::Base 

    # Database Schema 
    # t.string "name" 
    # t.string "uuid" 
    # t.integer "user_id" 
    # t.string "status",   default: "active" 

    belongs_to :user 
    has_many :subscribers 


    validates :user, :presence => true 
    validates_presence_of :uuid, :name 

end 

Subscriber Модель

class Subscriber < ActiveRecord::Base 

    # Database Schema 
    # t.string :email 
    # t.string :name 
    # t.integer :waiting_list_id 
    # t.string :code 
    # t.boolean :referred, default: false 
    # t.integer :referral_id 
    # t.integer "points",    default: 1 

    belongs_to :waiting_list 

    validates :waiting_list, :presence => true 
    validates_presence_of :email 

end 

Любая идея, как этого добиться?

+0

Привет, один быстрый вопрос. Какой «БД» вы использовали? –

+0

База данных Postgres –

ответ

0

Вы можете ordersubscribers по их максимальному points.

Subscriber порядок по их максимальному points и по возрастанию ceated_at.

@subscribers = Subscriber.group('id').order("max(points) desc, created_at") 

Subscriber упорядочить по их максимальной points и нисходящих ceated_at.

@subscribers = Subscriber.group('id').order("max(points) desc, created_at desc") 

Счастливый кодирования .....

+0

Привет, Нитин, спасибо за это! Я не знал об этой функциональности. Однако мне все еще не ясно, как я получу позицию в рейтинге конкретного пользователя. В основном, чтобы сказать: Есть люди Х перед вами, есть люди Y за вами. –

+0

Привет, Мануэль, не могли бы вы обновить свой вопрос с помощью моделей и чего вы ожидаете? По моему мнению, вы хотите присвоить рейтинг «пользователям» своими максимальными приглашениями. –

+0

Привет, Нитин, я обновил вопрос, надеюсь, теперь яснее. Чтобы ответить на ваш вопрос, мне нужна функция, которая дает мне количество людей, которых подписчики имеют перед собой, и количество подписчиков позади. Я не просто подсчитываю очки, но и когда они подписались, чтобы люди, которые подписались позже, будут позади, если не будут иметь больше очков. Достаточно ясно? –

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