Вопрос по ruby-on-rails – Показать все версии отдельных записей в Papertrail

1

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

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

Большое спасибо

Ваш Ответ

1   ответ
4

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

Отлично, взять все эти оценки и поместить их в массив. Проблема, которую вы получаете nil:NilClass материал) идет, потому что хотя бы одинreify ноль. То есть у какой-то версии нет reify.

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

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

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

Я бы предложил применить это к методу, какget_elo_scores, и тогда вы могли бы более легко назвать это как:

@player.get_elo_scores

РЕДАКТИРОВАТ Для уточнения по комментариям:

одель @Your User (или модель Player, как бы вы ее ни называли) должна иметь метод, который выглядит следующим образом:

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

Я прошу прощения за то, что не сделал это яснее, но у вас не будет доступа к@player внутри этого метода, потому что он существует только в контексте вашего контроллера и представления. Выше приведен правильный метод экземпляра: он будет вызывать.versions на себя, а остальное в порядке. Я также добавил явный обратный вызов в конце.

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

Надеюсь, это поможет

Большое спасибо за то, что нашли время помочь мне! Это прекрасно работает! Martin
Я добавил пояснения и код к своему ответу! MrDanA
Пожалуйста! Что касается вашего последнего комментария,self.versions будет захватывать все версии, если они правильно сохранены и прикреплены к пользователю. Возможно, последняя версия не сохранена? Возможно, он имеет нолreify и поэтому не заносится в массив баллов? MrDanA
Спасибо за вашу помощь @MrDanA. Просто чтобы прояснить ситуацию, я должен поставить def get_elo_scores elo_scores = [] @ player.versions.each do | version | разве version.reify.nil? elo_scores << version.reify.elo_score end end end в моей модели игроков и вызовите <% = @ player.get_elo_scores%> на мой взгляд? Я только что попробовал это, и я получил "неопределенный метод" версии ". То, что вы сказали, имеет смысл, и да, это найти, если у меня ноль рейф. Спасибо за ваше время, очень ценю! Martin
Infact @MrDanA, небольшая проблема. В настоящее время он не добавляет самую новую версию в массив, только предыдущие версии. Я играл вокруг, но я, кажется, нарушаю порядок! например, он появляется "[1000, 992]", когда он должен быть "[1000, 992, 990]". Martin

Похожие вопросы