Frage

Ich versuche dem Thread zur Implementierung eines Leistungssystems zu folgen (befindet sich bei So implementieren Sie ein Leistungssystem in ROR), und bin auf ein Typeerror, wenn das Objekt gespeichert und die Methode ausgezeichnet wird? wird angerufen. Der Fehler sieht aus:

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

Die Modelllogik ist genau wie in dieser vorherigen Frage definiert:

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

Irgendeine Idee, was hier passiert?

AKTUALISIEREN: Basierend auf den folgenden Informationen habe ich die Abstraktion entfernt und die Preisverfahren vorerst direkt in jedem Controller platziert. Nicht sehr trocken und wenn ich Zeit habe, mehr damit herumzuspielen, werde ich versuchen, es erneut abstrahieren, funktioniert aber vorerst. Ein Beispiel:

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

Lösung

Ich bin mir des genauen Problems nicht sicher, aber es sieht so aus, als ob die Methode, die die Leistung zugewiesen hat, falsch ist, was dazu führt, dass der Wert des Typs "Typ" falsch gespeichert wird. Überprüfen Sie Ihre Datenbank und stellen Sie sicher, dass der Wert, der in "Typ" geschrieben wird, eine Unterklasse Ihres übergeordneten und nicht der übergeordnete (oder einen anderen falschen Wert) ist.

Wenn dieser Wert falsch gespeichert wird, kann Rails kein Objekt instanziieren, und er muss diesen Wert aussehen, bevor er versucht, das Objekt zu erstellen, weshalb er diesen Fehler verurteilt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top