2012-05-18 2 views
1

저는 리그 시스템을 구축 중이며 결과에 따라 플레이어의 'elo score'를 저장하고 업데이트합니다. 이제 저는 High Charts를 추가하여 시즌 동안 선수 엘로 스코어를 감미로운 선 그래프로 표시하려고합니다. 누군가 내가 Papertrail을 사용하여 업데이트를 저장하고 모든 설치가 완료되었다고 제안했습니다.Papertrail의 모든 레코드 버전 표시

이제 내 문제가 발생합니다. 사용자가 'HighCharts'를 쉽게 사용할 수 있도록 배열에서 elo_score 버전을 뱉어 낼 방법을 찾지 못했습니다. 나는 마지막 업데이트 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 'NilClass"을 제공합니다

는 I도 시도했습니다. 단지 < % = @ player.versions.map {| version | version.reify %>는 모두를 울립니다. 정보는 기록에 포함되어 있으며 분명히 elo_score가 아닙니다.

아무도 도와 줄 수 있습니까? 미안 내가 이것을 분명하게하지 않으면, 나는 철로를 처음부터 완전히 들었다. 그리고 이것은 나의 여가 시간에 단지 재미있는 프로젝트 다. 그러나 나는 돌풍을 가지고있다!

고마워요! 당신이 무슨 짓을

답변

4

:

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

는 모든 점수를 받아 배열에 넣어 완벽하게 괜찮습니다. 적어도 하나의 reify이 없으므로 문제가 발생합니다 (nil:NilClass). 즉, 일부 버전에는 설명이 없습니다.

각 버전에 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 

편집을 코멘트에서 :

사용자 모델 (또는 당신이 그것을라는 이름의 어떤 플레이어 모델)은 다음과 같습니다 방법이 있어야합니다 :이 명확을하지 사과

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으로 전화를 걸 수 있습니다.

희망 하시겠습니까?

+0

@MrDanA에 감사드립니다. 그냥 명확하게하기 위해서, 나는 넣어야한다. def get_elo_scores elo_scores = [] @ player.versions.each do | version | version.reify.nil이 아닌 경우 ? elo_scores << 끝 끝 끝 version.reify.elo_score 내보기에 우리 선수 모델 및 통화 <% = @ player.get_elo_scores %>에서 ? 방금이 시도하고 '정의되지 않은 메서드'버전'얻을. 당신이 말한 것은 완벽한 의미입니다. 그렇습니다. 정말 고맙습니다. – Martin

+0

몇 가지 설명과 코드를 제 대답에 추가했습니다! – MrDanA

+0

나를 도울 시간을내어 주셔서 대단히 감사합니다! 완벽하게 작동합니다! – Martin