1

J'essaie de suivre le processus d'implémentation d'un système de réalisation (situé au How to implement an achievement system in RoR). Je suis en train de courir dans une erreur de type lorsque l'objet est sauvegardé et que la méthode est attribuée. est appelé. L'erreur ressemble:TypeError lors de la tentative d'utilisation d'observateurs et de STI

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?' 

La logique du modèle est exactement tel que défini dans cette question précédente:

def awarded?(achievement) 
    achievements.count(:conditions => { :type => achievement }) > 0 
    end 

Toute idée de ce qui se passe ici?

MISE À JOUR: D'après les informations ci-dessous, je fini par enlever l'abstraction et de placer les méthodes d'attribution directement dans chaque contrôleur pour l'instant. Pas très sec et quand j'ai le temps de jouer avec ça, je vais essayer de l'extraire à nouveau, mais ça marche pour le moment. Un exemple:

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

Répondre

1

Je ne sais pas du problème exact mais il semble que tout ce qui est fourni au la méthode qui consiste à attribuer la réalisation est faux, ce qui est à l'origine de la valeur du « type » doit être stocké de manière incorrecte. Vérifiez votre base de données et assurez-vous que la valeur inscrite dans 'type' est une sous-classe de votre parent, et non le parent (ou toute autre valeur incorrecte).

Si cette valeur est stockée incorrectement, les rails ne pourront pas instancier un objet, et il doit rechercher cette valeur avant de tenter de créer l'objet, ce qui explique pourquoi il lance cette erreur.

Questions connexes