TypeError при попытке использовать наблюдателей и STI - PullRequest
1 голос
/ 14 февраля 2010

Я пытаюсь следовать вместе с веткой о реализации системы достижений (находится по адресу Как реализовать систему достижений в 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

Есть идеи, что здесь происходит?

UPDATE: Основываясь на приведенной ниже информации, я закончил тем, что удалил абстракцию и разместил методы вознаграждения прямо в каждом контроллере. Не очень СУХОЙ, и когда у меня будет время поэкспериментировать с этим, я попытаюсь снова абстрагироваться, но пока работает. Пример:

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

1 Ответ

1 голос
/ 15 февраля 2010

Не уверен в точной проблеме, но похоже, что все, что предоставляется методу, присваивающему достижение, неверно, что приводит к неправильному сохранению значения 'type'. Проверьте свою базу данных и убедитесь, что значение, записываемое в 'type', является подклассом вашего родителя, а не родителя (или любого другого неправильного значения).

Если это значение хранится неправильно, rails не сможет создать экземпляр объекта, и оно должно посмотреть это значение, прежде чем попытается создать объект, поэтому его выдает эта ошибка.

...