Question

Je suis en train de suivre le fil sur la mise en œuvre d'un système de réalisation (situé à Comment mettre en œuvre un système de réalisation RoR), et je suis en cours d'exécution dans un TypeError lorsque l'objet est enregistré et la méthode attribué? est appelée. L'erreur ressemble à:

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 plus je vais essayer de abstraire à nouveau, mais fonctionne pour l'instant. Un exemple:

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

La solution

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 en cours d'écriture « type » est une sous-classe de vos parents, et non le parent (ou toute autre valeur incorrecte).

Si cette valeur est stockée de manière incorrecte rails ne sera pas en mesure d'instancier un objet, et il faut regarder cette valeur avant qu'il tente de créer l'objet qui est la raison pour laquelle son lancer cette erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top