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」の値が正しく保存されていません。データベースをチェックして、「type」に書き込まれる値が親のサブクラスであり、親(またはその他の誤った値)ではないことを確認してください。

その値が正しく格納されていない場合、railsはオブジェクトをインスタンス化できず、オブジェクトを作成しようとする前にその値を検索する必要があるため、エラーがスローされます。

于 2010-02-15T16:34:50.490 に答える