Показать все версии отдельных записей в Papertrail
-
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
на любом пользовательском (или проигрышем) объекте.
Надеюсь, что помогает!