1

私はリーグシステムを構築しており、現在、結果に応じてプレーヤーの「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'」を与えます。<%= @player.versions.map{|バージョン| version.reify%>は、明らかにelo_scoreだけでなく、レコード内のすべての情報を吐き出します。

誰か助けてもらえますか?申し訳ありませんが、これを明確にしていない場合、私はレールにまったく慣れていません。これは私の暇な時間の楽しいプロジェクトですが、私は爆発しています!

どうもありがとう!

4

2 に答える 2

4

ここで行ったこと:

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

これらすべてのスコアを取得して配列に入れることはまったく問題ありません。あなたが得ている問題(nil:NilClassもの)は、少なくとも1つreifyがゼロであるため、来ています。つまり、特定のバージョンには reify がないということです。

各バージョンに具体化が必要な場合は、必ずモデルの検証として追加し、コード内で具体化が設定されている場所を見つけて、それが nil である理由を確認してください。

バージョンが nil を具体化しても問題ない場合は、さまざまな方法で実現できますが、単純明快な方法は次のようになります。

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

EDITコメントからの明確化のために:

User モデル (または Player モデル、名前は何でも) には、次のようなメソッドが必要です。

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これで、任意の User (または Player) オブジェクトを呼び出すことができるようになります。

それが役立つことを願っています!

于 2012-05-18T13:07:31.230 に答える