Display all versions of individual records in Papertrail

和自甴很熟 提交于 2019-12-01 12:42:47

What you did here:

@player.versions.map { |version| version.reify.elo_score }

Is perfectly fine to take all those scores and put them in an array. The problem that you're getting (the nil:NilClass stuff) is coming because at least one reify is nil. That is, that some version doesn't have a reify.

If each version is supposed to have a reify, be sure to add that as a model validation, and find in your code where the reify is being set and see why it's nil.

If it's okay for a version to have a nil reify, you could accomplish it a number of ways, but the straightforward and explicit way would look like this:

elo_scores = []
@player.versions.each do |version|
    unless version.reify.nil?
        elo_scores << version.reify.elo_score
    end
end

I would suggest putting this in to a method, like get_elo_scores, and then you could more easily call it like:

@player.get_elo_scores

EDIT For clarification from the comments:

Your User model (or Player model, whatever you named it) should have a method that looks like this:

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

I apologize for not making this clearer, but you won't have access to @player within this method because that only exists in the context of your controller and view. The above is now a proper instance method: it will call .versions upon itself, and the rest is fine. I also added an explicit return call at the end.

Now you will be able to call @player.get_elo_scores on any User (or Player) object.

Hope that helps!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!