MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Metaclass deligate n'étant pas une instance

Le problème ici est que votre concept est complètement erroné. Vous affectez une carte à la classe et non à l'instance avec cette ligne :

User.metaClass.dynamicAttributes = [:]

Afin d'accomplir ce que vous cherchez à faire, vous devez faire ce qui suit :

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 
}

Je suis sûr qu'il existe un moyen plus propre de procéder, mais ce qui précède montre une solution dans laquelle la carte est instanciée par instance et non sur toutes les instances.