我目前设法让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
但那可能只是因为我真的不明白发生了什么......
答案 0 :(得分:0)
因为UpdateService
是一个类而不是方法名,所以必须通过调用构造函数UpdateService.new
来创建此类的实例。看看那里有execute
方法,请考虑采取以下措施:
def update_rank
update = Boards::UpdateService.new
update.execute(self)
end
<强>更新强>:
调用execute
只会因为如果用户leaderboard
存在而更新用户List
,并且如果它不存在则创建它。
要正确初始化,您应该考虑在创建用户时调用为其创建leaderbord的方法。