Question

Je suis en train de construire un système de ligue, et actuellement, il stocke et met à jour les joueurs elo score " en fonction du résultat.Maintenant, je vais essayer d'ajouter dans 'HighCharts' pour afficher les joueurs elo score au cours de la saison dans un joli tableau.Quelqu'un m'a suggéré d'utiliser Papertrail pour stocker les mises à jour et j'ai tous installé.

Maintenant, voici mon problème, je n'arrive pas à comprendre comment cracher les utilisateurs elo_score versions dans un tableau facile pour 'HighCharts" pour les utiliser.Je peux obtenir les dernières mises à jour de elo_score:

Last updated score = <%= @player.versions.last.reify.elo_score %> 

Mais je n'arrive pas à trouver la syntaxe pour cracher tous les "versions" pour "elo_score'.Quelque chose comme "1000, 1020, 1043, 1020".

J'ai aussi essayé:

<%= @player.versions.map { |version| version.reify.elo_score} %>

Mais cela me donne "undefined method `elo_score' for nil:NilClass".Tout simplement <%= @player.les versions.carte { |version| version.réification %> crache tous les informations dans le dossier et évidemment pas seulement le elo_score.

Quelqu'un peut-il aider?Désolé si je n'ai pas fait comprendre, je suis absolu de la marque de nouveaux rails, et c'est juste un projet amusant dans mon temps libre, mais je vais avoir un souffle!

Merci beaucoup!

Était-ce utile?

La solution

Ce que vous avez fait ici:

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

Est parfaitement bien de prendre tous ces scores et les mettre dans un tableau.Le problème que vous obtenez (le nil:NilClass trucs) est venue parce que au moins un reify est nul.Qui est, que certaines version ne dispose pas d'une réification.

Si chaque version est censé avoir une réification, assurez-vous d'ajouter qu'il la validation du modèle, et de trouver dans votre code où la réification est d'être ensemble et de voir pourquoi il est nul.

Si c'est d'accord pour une version à avoir un néant réification, vous pouvez effectuer un certain nombre de façons, mais la simple façon explicite et devrait ressembler à ceci:

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

Je suggère de mettre cela dans une méthode, comme get_elo_scores, et puis vous pourriez plus facilement l'appeler comme:

@player.get_elo_scores

MODIFIER Pour la clarification de vos commentaires:

Votre modèle Utilisateur (ou le Lecteur modèle, quel que soit son nom) doit avoir une méthode qui ressemble à ceci:

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

Je m'excuse pour ne pas faire plus claire à ce sujet, mais vous n'avez pas accès à @player dans cette méthode, parce qu'elle n'existe que dans le contexte de votre contrôleur et la vue.Le ci-dessus est un bon exemple de la méthode:il fera appel .versions sur lui-même, et le reste est très bien.J'ai aussi ajouté un retour explicite à la fin.

Maintenant, vous serez en mesure d'appeler @player.get_elo_scores sur n'importe quel Utilisateur (ou le Lecteur) de l'objet.

Espérons que ça aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top