Вопрос

Я пытаюсь следовать вместе с веткой при реализации системы достижений (расположенной в Как реализовать систему достижений в ROR) и сталкиваюсь с типами, когда объект сохраняется, и награжден метод? называется. Ошибка выглядит как:

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
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top