我正在为我的项目构建基本的等待列表功能。
我有一个名为Subscribers的模型,它有两列:" points"和" created_at"。显然,在创建记录时生成Created_at,并且points是从1开始的整数。
当用户注册时,他们会收到可以在社交媒体上分享的代码。 每当新用户通过推介代码注册时,推荐人获得1分。
我需要一个按点和时间对订阅者进行排序的功能,以便在给定特定订阅者的情况下,我知道他在列表中前后有多少人。
困难在于,我不仅要计算具有更多积分的用户,还要考虑在我查询的特定用户之后注册的用户。我需要避免的是,具有相同用户点数但后来注册的用户最终会领先。
等待列表模型
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
订阅者模型
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)
您可order
subscribers
最多points
。
Subscriber
按其最高points
和升序created_at
排序。
@subscribers = Subscriber.group('id').order("max(points) desc, created_at")
Subscriber
按其最大points
和降序created_at
排序。
@subscribers = Subscriber.group('id').order("max(points) desc, created_at desc")