1

달성 시스템 구현시 스레드 (How to implement an achievement system in RoR에 있음)를 따르려고하고 있으며 객체 저장 및 메서드 수여시 TypeError로 실행 중입니까? 호출됩니다. 이 오류는 다음과 같습니다옵저버 및 STI를 사용할 때 TypeError

TypeError (can't dump anonymous class Class): 
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/yaml/rubytypes.rb:6:in `to_yaml' 
    app/models/user.rb:18:in `awarded?' 

모델 논리 정확하게 그 이전 질문에 정의 : 여기에 무슨 일이 일어나고 있는지

def awarded?(achievement) 
    achievements.count(:conditions => { :type => achievement }) > 0 
    end 

어떤 생각?

UPDATE : 아래, 나는 추상화를 제거하고 지금은 각각의 컨트롤러에 직접 수상 방법을 배치까지 종료 된 정보를 바탕으로 . 그다지 DRY가 안되며, 더 많은 시간을 가지고 놀면, 다시 추상화하려고 노력할 것입니다. 그러나 지금은 효과가 있습니다. 예 :

if @user.achievements.count(:conditions => { :type => "CommentAchievement" }) < 1 and @comments > 1000 
    @user.achievements << CommentAchievement.new(:group_id => @group) 
end 

답변

1

정확한 문제의 확인 만이 성과를 할당하는 방법이 잘못 저장되는 '유형'의 값을 일으키는 잘못 인에게 제공되고있는 어떤 것 같습니다하지 않습니다. 데이터베이스를 확인하고 'type'에 쓰여지는 값이 부모 (또는 다른 잘못된 값)가 아닌 부모의 하위 클래스인지 확인하십시오.

이 값을 잘못 저장하면 레일스가 객체를 인스턴스화 할 수 없으며 객체를 생성하려고 시도하기 전에 해당 값을 확인해야합니다.