在Papertrail中显示各个记录的所有版本
-
11-12-2019 - |
题
我正在建立一个联盟系统,目前它存储和更新球员的"elo分数"取决于结果。现在,我正在尝试添加"HighCharts"以在一个甜美的折线图中显示本赛季的球员elo得分。有人建议我使用Papertrail来存储更新,我已经安装了所有更新。
现在我的问题来了,我似乎无法弄清楚如何在一个易于'HighCharts'使用的数组中吐出用户elo_score版本。我可以得到elo_score的最后更新:
Last updated score = <%= @player.versions.last.reify.elo_score %>
但我似乎无法找到吐出的语法 全部 "elo_score"的"版本"。类似的东西"1000, 1020, 1043, 1020".
我也试过:
<%= @player.versions.map { |version| version.reify.elo_score} %>
但是这给了我"未定义的方法'elo_score'for nil:NilClass"。而只是 <%=@播放器。版本。地图{/版本/版本。reify%>吐出 全部 记录中的信息,显然不仅仅是elo_score。
有人能帮忙吗?对不起,如果我没有说清楚,我绝对是rails的新手,这只是一个有趣的项目在我的业余时间,但我有一个爆炸!
谢谢!
解决方案
你在这里做了什么:
@player.versions.map { |version| version.reify.elo_score }
把所有的分数放在一个数组里是很好的。你得到的问题( nil:NilClass
东西)来了,因为至少有一个 reify
是零。也就是说,某些版本没有reify。
如果每个版本都应该有一个reify,请务必将其添加为模型验证,并在代码中查找设置reify的位置,并查看为什么它为零。
如果一个版本有一个nil reify是可以的,你可以通过多种方式来完成它,但是直接和明确的方式看起来像这样:
elo_scores = []
@player.versions.each do |version|
unless version.reify.nil?
elo_scores << version.reify.elo_score
end
end
我建议把它放在一个方法中,比如 get_elo_scores
, ,然后你可以更容易地称之为:
@player.get_elo_scores
编辑 对于从评论澄清:
您的用户模型(或玩家模型,无论您命名它)都应该有一个如下所示的方法:
def get_elo_scores
elo_scores = []
self.versions.each do |version|
unless version.reify.nil?
elo_scores << version.reify.elo_score
end
end
return elo_scores
end
我很抱歉没有说得更清楚,但你无法访问 @player
在这个方法中,因为它只存在于你的控制器和视图的上下文中。以上是一个正确的实例方法:它会调用 .versions
在自己身上,其余的都很好。我还在最后添加了一个明确的返回调用。
现在你可以打电话了 @player.get_elo_scores
在任何用户(或玩家)对象上。
希望有帮助!