尝试使用观察者和STI时出现TypeError

时间:2010-02-14 01:17:59

标签: ruby-on-rails observer-pattern single-table-inheritance typeerror

我正在尝试跟随实现成就系统的线程(位于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

1 个答案:

答案 0 :(得分:1)

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

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