Domanda

Sto costruendo un sistema di campionato e attualmente memorizza e aggiorna e aggiorna il punteggio Elo dei giocatori a seconda del risultato. Ora, sto cercando di aggiungere 'Highcharts' per visualizzare i giocatori Elo Punteggio sopra la stagione in un grafico a linee dolci. Qualcuno ha suggerito di utilizzare Papertrail per memorizzare gli aggiornamenti e ho ricevuto tutto il possibile.

Ora qui viene il mio problema, non riesco a capire come sputare le versioni Elo_Score degli utenti in un array facile per 'HighCharts' da usare. Posso ottenere gli ultimi aggiornamenti a Elo_Score:

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

Ma non riesco a trovare la sintassi per sputare Tutto Le "Versioni" per "Elo_Score". Qualcosa come "1000, 1020, 1043, 1020".

Ho anche provato:

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

Ma questo mi dà "metodo indefinito" Elo_score "per Nil: Nilclass". Mentre solo <%= @ player.versions.map {| versione | Versione.Redifica%> Sputa Tutte le informazioni nel record e ovviamente non solo l'Elo_Score.

Qualcuno può aiutare? Scusa se non ho reso questo chiaro, sono assoluto di zecca nuovi per le rotaie, e questo è solo un progetto divertente nel mio tempo libero ma sto facendo un esplosione!

Grazie Alot!

È stato utile?

Soluzione

Cosa hai fatto qui:

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

è perfettamente bello prendere tutti quei punteggi e metterli in un array. Il problema che stai ottenendo (la roba nil:NilClass) sta arrivando perché almeno un reify è nil. Cioè, che qualche versione non ha un reify.

Se ogni versione dovrebbe avere un reify, assicurarsi di aggiungere che come convalida del modello e trovare nel tuo codice in cui viene impostato il reify e vedere perché è NIL.

Se va bene per una versione ad avere un nil reify, potresti eseguirlo un certo numero di modi, ma il modo semplice ed esplicito sarebbe simile a questo:

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

Ti suggerirei di metterlo in un metodo, come get_elo_scores, e poi puoi chiamarlo più facilmente come:

@player.get_elo_scores
.

Modifica per chiarimenti dai commenti:

Il tuo modello utente (o modello del lettore, qualunque cosa tu lo denominato) dovrebbe avere un metodo che assomiglia a questo:

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
.

Mi scuso per non averlo reso più chiaro, ma non avrai accesso a @player all'interno di questo metodo perché ciò esiste solo nel contesto del controller e della visualizzazione. Quanto sopra è ora un metodo di istanza appropriato: chiamerà .versions su se stesso e il resto va bene. Ho anche aggiunto una chiamata di ritorno esplicita alla fine.

Ora sarai in grado di chiamare @player.get_elo_scores su qualsiasi oggetto utente (o giocatore).

Spero che ti aiuti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top