MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Deligierte Metaklasse ist keine Instanz

Das Problem hier ist, dass Ihr Konzept völlig fehlerhaft ist. Mit dieser Zeile weisen Sie der Klasse und nicht der Instanz eine Karte zu:

User.metaClass.dynamicAttributes = [:]

Um das zu erreichen, was Sie möchten, müssen Sie Folgendes tun:

User.metaClass.propertyMissing = { String name ->
  if (!delegate.dynamicAttributes) delegate.dynamicAttributes = [:]
  delegate.dynamicAttributes[name] 
}  
User.metaClass.propertyMissing = { String name, value ->     
  if (!delegate.dynamicAttributes) delegate.dynamicAttributes = [:]
  delegate.dynamicAttributes[name] = value 
}

Ich bin mir sicher, dass es einen saubereren Weg gibt, dies zu tun, aber das Obige zeigt eine Lösung, bei der die Karte pro Instanz und nicht über alle Instanzen hinweg instanziiert wird.