我正在尝试跟随实现成就系统的线程(位于How to implement an achievement system in RoR),并在保存对象并获得方法时遇到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
知道这里发生了什么吗?
更新 基于以下信息,我最终删除了抽象并将奖励方法直接放在每个控制器中。不是很干,当我有时间玩它时,我会尝试再次抽象出来,但现在可以工作了。一个例子:
if @user.achievements.count(:conditions => { :type => "CommentAchievement" }) < 1 and @comments > 1000
@user.achievements << CommentAchievement.new(:group_id => @group)
end
答案 0 :(得分:1)
不确定确切的问题,但看起来提供给分配成就的方法的任何内容都是错误的,这导致'type'的值被错误地存储。检查数据库并确保写入'type'的值是父类的子类,而不是父类(或任何其他不正确的值)。
如果错误地存储了该值,则rails将无法实例化对象,并且它必须在尝试创建对象之前查看该值,这就是它抛出该错误的原因。