查找前五位获得最高分的用户

时间:2016-10-15 10:19:18

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个受邀者模型,belongs_to :eventhas_many :analytics积分,其中存储了所有积分

事件模型has_many :inviteeshas_many :analytics

分析模型belongs_to :event

在分析模型中,我定义了一些action_points,比如评论,他将得到2分,评分为5分

ACTION_POINTS = {"favorite" => 5, "rated" => 5, "comment" => 2, "conversation post" => 5, "like" => 2}

我想让那些先获得1000分的前五名受邀者 - 为此我迄今为止所做的是

在我的被邀请者模型中,我在更新后创建了一个方法,并添加了一个时间字段 invitee_points_time

after_update :update_time, if: -> { points == 1000}

scope :thousand_points, -> { where(points: '1000').order('invitee_points_time DESC') }

def update_time
  self.update_column('invitee_points_time', Time.now)
end

然后我想把这五个被邀请者送到最高的时间。但问题是现有被邀请者已经有超过1000分的问题,而且我也希望获得那些获得1000分的五名被邀请者的名单。 是的,它应该来自事件,例如Event.last.invitee.analytics 请告诉我,如果我忘记提及的话。

要获得带有积分的旧受邀者名单,我就这样做了

Analytic.select("invitee_id, sum(points) as sum_points").where(:invitee_id => Event.find(364).invitees.pluck(:id)).group(:invitee_id).having("sum_points > 1000").map{|a| [a.invitee_id, a.sum_points]}

这就是我得到的

[[8358, 1929], [11326, 1340], [11328, 1200], [11358, 1042], [11366, 2699], [11377, 11737], [11415, 7968], [11421, 1398], [11429, 1965], [11437, 1750], [11443, 54928], [11447, 3052], [11448, 28045], [11449, 2846], [11455, 3436], [11457, 40937], [11458, 32163], [11460, 2179], [11935, 2784]]

但我真的不明白如何从他们那里找到(旧记录)以及从5个被邀请者到达前1000点的新记录。

0 个答案:

没有答案