1

我正在尝试遵循实现成就系统的线程(位于如何在 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
4

1 回答 1

1

不确定确切的问题,但看起来为分配成就的方法提供的任何内容都是错误的,这导致“类型”的值存储不正确。检查您的数据库并确保写入“type”的值是您父级的子类,而不是父级(或任何其他不正确的值)。

如果该值存储不正确,rails 将无法实例化对象,并且它必须在尝试创建对象之前查找该值,这就是它抛出该错误的原因。

于 2010-02-15T16:34:50.490 回答