PaperTrotailの個々のレコードのすべてのバージョンを表示します
-
11-12-2019 - |
質問
リーグシステムを構築しています。結果に応じてプレイヤーのELOスコアを保存して更新します。さて、私は「ハイチャート」を追加して、甘いラインチャートの中で季節のプレーヤーのエロスコアを表示しようとしています。誰かがPaperTrailを使ってアップデートを保存することをお勧めします、そして私はすべてインストールされています。
今ここに問題があります、私は「ハイチート」を使うのが簡単なアレイのelo_scoreのバージョンを使い果たす方法を見つけることはできません。 elo_scoreの最後のアップデートを取得できます:
Last updated score = <%= @player.versions.last.reify.elo_score %>
.
しかし、私は all>「elo_score」の「バージョン」を吐き出すための構文を見つけることはできません。 "1000,1020,1043,1020"のようなもの。
私も試しました:
.
<%= @player.versions.map { |version| version.reify.elo_score} %>
しかしこれは私に「未定義の方法」を与えます.Nil:NilClassのための「Elo_Score」。 <%= @ Player.versions.map {| version |}バージョン。%> all 情報を登録し、明らかにelo_scoreだけではありません。
誰もが助けになることができますか?申し訳ありません
ありがとうございました!
解決
ここに何をしたこと:
@player.versions.map { |version| version.reify.elo_score }
.
これらのスコアをすべて撮り、それらをアレイに入れるには完全に問題ありません。少なくとも1つのnil:NilClass
がNILであるため、取得している問題が発生しています。つまり、いくつかのバージョンにはReifyがありません。
各バージョンがReifyを持つことになっている場合は、モデル検証としてそれを追加して、Reifyが設定されているコードを見つけて見つけてください。
版が困難になることができれば、あなたはそれにいくつかの方法を達成することができました、しかし直接的で明示的な方法はこのように見えるでしょう:
elo_scores = []
@player.versions.each do |version|
unless version.reify.nil?
elo_scores << version.reify.elo_score
end
end
.
これをreify
のように、方法に入れることをお勧めします。その後、次のようにもっと簡単に呼び出すことができます。
@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
これを中止しないことをお詫び申し上げます。上記は適切なインスタンスメソッドです.get_elo_scores
それ自体が呼び出され、残りは大丈夫です。私はまた最後に明示的な戻り呼び出しを追加しました。
今度は、任意のユーザー(またはプレーヤー)オブジェクトの@player
を呼び出すことができます。
助けを願っています!