我正在建立一个联盟系统,目前它存储和更新球员的"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 在任何用户(或玩家)对象上。

希望有帮助!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top