在Papertrail中显示各个记录的所有版本

时间:2012-05-18 12:56:02

标签: ruby-on-rails paper-trail-gem

我正在建立一个联盟系统,目前它根据结果存储和更新球员的'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} %>

但这给了我“nil:NilClass”的未定义方法`elo_score'。只是&lt;%= @ player.versions.map {|版本| version.reify%&gt;吐出记录中的所有信息,显然不仅仅是elo_score。

有人可以帮忙吗?对不起,如果我没有说清楚,我对rails来说是绝对的全新,这在我的业余时间只是一个有趣的项目,但我有一个爆炸!

非常感谢!

2 个答案:

答案 0 :(得分:4)

你在这里做了什么:

@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

希望有所帮助!

答案 1 :(得分:0)

这是@MrDanA回答的单线版本:

elo_scores = self.versions.map{|version| version.reify.elo_scores}

请注意,尽管您不能检查version.reify.nil?