每次用户分数更新时获取排行榜以进行更新

时间:2015-05-07 09:26:11

标签: ruby-on-rails ruby leaderboard

我目前设法让leaderboard gem处理我的Rails应用程序,但我似乎无法弄清楚如何将用户数据放到它上面。我也不知道如何在用户分数更新时更新它......

我跟着this tutorial试图让它运转起来但现在正在努力让最后一点整合......

目前我有这样的Boards update_service.rb:

module Boards
  class UpdateService < Boards::Base
    def execute(user)
      name = user.first_name
      score = user.percentages
      leaderboard.rank_member(name, score)
      member = leaderboard.score_and_rank_for(name)
      member[:page] = leaderboard.page_for(name, leaderboard.page_size)
      member
    end
  end
end

我想立即在所有用户上调用此服务(以便他们都按当前分数排名)然后进行设置,以便每次更新用户的分数时调用此服务。

我不知道在哪里调用它来获取初始数据......

但是通过在rails控制台中玩游戏,我发现调用它有效:

update = Boards::UpdateService.new
Student.all.each do |student|
  update.execute(student)
end

为了更新用户的分数更新,我认为我应该这样做:

 after_update :update_rank

  def update_rank
    Boards::UpdateService.new
  end

在User类中虽然说实话,我从教程中得到了部分内容,但我并不理解为什么它不是:

def update_rank
  Boards::UpdateService(user)
end 

但那可能只是因为我真的不明白发生了什么......

1 个答案:

答案 0 :(得分:0)

因为UpdateService是一个类而不是方法名,所以必须通过调用构造函数UpdateService.new来创建此类的实例。看看那里有execute方法,请考虑采取以下措施:

def update_rank
  update = Boards::UpdateService.new
  update.execute(self)
end

<强>更新

调用execute只会因为如果用户leaderboard存在而更新用户List,并且如果它不存在则创建它。

要正确初始化,您应该考虑在创建用户时调用为其创建leaderbord的方法。