Показать все версии отдельных записей в Papertrail

StackOverflow https://stackoverflow.com//questions/10653085

  •  11-12-2019
  •  | 
  •  

Вопрос

Я строю систему лиги и в настоящее время она хранит и обновляет результаты «ELO» игроков в зависимости от результата. Теперь я пытаюсь добавить в «HighCharts» для отображения игроков ELO START в течение сезона в сладкой графике линии. Кто-то предложил, я использую PaperTrail для хранения обновлений, и у меня все установлено.

Теперь приходит мою проблему, я не могу понять, как высказать, как выпрыгнуть версии elo_score в массиве простой для использования «HighCharts». Я могу получить последние обновления в 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} %>
.

Но это дает мне «неопределенный метод» ELO_SCORE 'для NIL: Nilclass ". В то время как только <%= @ player.versions.map {| версия | version.reify%> выплевывает информацию all в записи и, очевидно, не только elo_score.

Может кто-нибудь помочь? Извините, если я не сделал этого ясного, я абсолютный совершенно новый к рельсам, и это просто веселый проект в свободное время, но у меня есть взрыв!

Спасибо, много!

Это было полезно?

Решение

Что вы сделали здесь:

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

совершенно нормально, чтобы взять все эти оценки и положить их в массив. Проблема, которую вы получаете (вещество nil:NilClass), приходит, потому что хотя бы один генеракодицетагCode является Nil. То есть то, что некоторая версия не имеет рельса.

Если каждая версия должна иметь ryify, обязательно добавьте в качестве проверки модели, и найдите в своем коде, где устанавливается REIFY и посмотрите, почему это Nil.

Если для версии в порядке, чтобы версию иметь Nil rify, вы можете выполнить его ряд способов, но простой и явный путь будет выглядеть так:

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 на себя, а остальное в порядке. Я также добавил явный возвратный звонок в конце.

Теперь вы сможете вызвать .versions на любом пользовательском (или проигрышем) объекте.

Надеюсь, что помогает!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top