sql >> Base de Datos >  >> NoSQL >> MongoDB

El delegado de metaclase no es una instancia

El problema aquí es que su concepto es completamente defectuoso. Está asignando un mapa a la Clase y no a la instancia con esta línea:

User.metaClass.dynamicAttributes = [:]

Para lograr lo que está buscando, debe hacer lo siguiente:

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 
}

Estoy seguro de que hay una forma más limpia de hacer esto, pero lo anterior demuestra una solución en la que el mapa se instancia por instancia y no en todas las instancias.