Pregunta

Estoy construyendo un sistema de liga y actualmente almacena y actualiza la 'puntuación elo' de los jugadores según el resultado.Ahora, estoy intentando agregar 'HighCharts' para mostrar la puntuación elo de los jugadores a lo largo de la temporada en un gráfico de líneas atractivo.Alguien me sugirió que usara Papertrail para almacenar las actualizaciones y ya lo tengo todo instalado.

Ahora aquí viene mi problema, parece que no puedo entender cómo escupir las versiones de elo_score de los usuarios en una matriz fácil de usar para 'HighCharts'.Puedo obtener las últimas actualizaciones de elo_score:

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

Pero parece que no puedo encontrar la sintaxis para escupir. todo las 'versiones' para 'elo_score'.Algo así como "1000, 1020, 1043, 1020".

También lo intenté:

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

Pero esto me da un "método indefinido `elo_score' para nil:NilClass".Mientras que solo <%= @jugador.versions.map {| versión | versión.reify %> escupe todo información en el registro y obviamente no solo el elo_score.

¿Alguien puede ayudar?Lo siento si no he dejado esto claro, soy absolutamente nuevo en esto de los rieles y este es solo un proyecto divertido en mi tiempo libre, ¡pero me lo estoy pasando genial!

¡Muchas gracias!

¿Fue útil?

Solución

Lo que hiciste aquí:

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

Está perfectamente bien tomar todas esas puntuaciones y ponerlas en una matriz.El problema que estás teniendo (el nil:NilClass cosas) viene porque al menos uno reify es nulo.Es decir, que alguna versión no tenga cosificación.

Si se supone que cada versión tiene un reify, asegúrese de agregarlo como validación del modelo, busque en su código dónde se configura el reify y vea por qué es nulo.

Si está bien que una versión tenga una cosificación nula, puedes lograrlo de varias maneras, pero la forma más sencilla y explícita sería la siguiente:

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

Sugeriría poner esto en un método, como get_elo_scores, y luego podrías llamarlo más fácilmente como:

@player.get_elo_scores

EDITAR Para aclaraciones de los comentarios:

Su modelo de Usuario (o modelo de Reproductor, como sea que lo llame) debe tener un método similar a este:

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

Pido disculpas por no dejar esto más claro, pero no tendrás acceso a @player dentro de este método porque solo existe en el contexto de su controlador y vista.Lo anterior es ahora un método de instancia adecuado:llamará .versions sobre sí mismo, y el resto está bien.También agregué una llamada de devolución explícita al final.

Ahora podrás llamar @player.get_elo_scores en cualquier objeto de Usuario (o Jugador).

¡Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top