Módulo: Mongoid::Association::Accesores
- Ampliado por:
- ActiveSupport::Concern
- Incluido en:
- Mongoid::Association
- Definido en:
- lib/mongoid/association/accessors.rb
Overview
Este módulo contiene todo el comportamiento relacionado con el acceso a las asociaciones mediante los métodos getter y setter, además de cómo delegar a los desarrolladores la creación de nuevas instancias.
Resumen del método de clase colapsar
-
.define_builder!(asociación) ⇒ Clase
Define un método de constructor para una asociación embeds_one.
-
.define_creator!(asociación) ⇒ Clase
Define un método de creación para una asociación embeds_one.
-
.define_existence_check!(association) ⇒ Clase
Añade la comprobación de existencia para las asociaciones.
-
.define_getter!(association) ⇒ Clase
Define el getter para la asociación.
-
.define_ids_getter!(asociación) ⇒ Clase
Define el método getter para los ID de los documentos en la asociación.
-
.define_ids_setter!(association) ⇒ Object
Define el método setter que permite establecer documentos en esta asociación mediante sus identificadores.
-
.define_setter!(association) ⇒ Clase
Define el configurador para la asociación.
Resumen del método de instancia colapsar
-
#__build__(name, object, association, selected_fields = nil) ⇒ Proxy
Compila el documento relacionado y crea la asociación a menos que el documento sea nulo, entonces establece la asociación en este documento.
-
#create_relation(objeto, Association, selected_fields = nil) ⇒ Proxy
Cree una asociación a partir de un objeto y metadatos de asociación.
-
#reset_relation_criteria(name) ⇒ Object
Restablece los criterios dentro del proxy de asociación.
-
#set_relation(nombre, relación) ⇒ Proxy
Establece la asociación proporcionada en una variable de instancia de la clase con el nombre proporcionado.
Detalles del método de clase
.define_builder!(asociación) ⇒ Clase
Define un método de constructor para una asociación embeds_one. Esto se define como #build_name.
387 388 389 390 391 392 393 394 395 396 397 398 399 400 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 387 def sí mismo.define_builder!(asociación) Nombre = asociación.Nombre asociación.clase_inversa.tocar hacer |klass| klass.re_define_method("build_#{nombre}") hacer |*args| atributos, = parse_args(*args) Documento = Fábrica.compilar(asociación.relation_class, atributos) _edificio hacer niño = enviar("#{name}=", Documento) niño.run_callbacks(compilar) niño end end end end |
.define_creator!(association) ⇒ Class
Define un método de creación para una asociación embeds_one. Esto se define como #create_name. Después de que se compile el objeto, este se guardará inmediatamente.
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 412 def sí mismo.define_creator!(asociación) Nombre = asociación.Nombre asociación.clase_inversa.tocar hacer |klass| klass.re_define_method("crear_#{nombre}") hacer |*args| atributos, = parse_args(*args) Documento = Fábrica.compilar(asociación.klass, atributos) doc = asignando hacer enviar("#{name}=", Documento) end doc.guardar guardar si nuevo_registro? && asociación.¿stores_foreign_key? doc end end end |
.define_existence_check!(association) ⇒ Class
Añade la comprobación de existencia para las asociaciones.
277 278 279 280 281 282 283 284 285 286 287 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 277 def sí mismo.definir_comprobación_de_existencia!(asociación) Nombre = asociación.Nombre asociación.clase_inversa.tocar hacer |klass| klass.module_eval <<-END, __FILE__, __LINE__ + 1 def #{Nombre}? without_autobuild { !__send__(:#{Nombre}).empty? } end alias :has_#{Nombre}? :#{Nombre}? END end end |
.define_getter!(association) ⇒ Clase
Define el getter para la asociación. Nada demasiado especial aquí: solo devuelve la variable de instancia de la asociación si existe o compila el objeto.
299 300 301 302 303 304 305 306 307 308 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 299 def sí mismo.define_getter!(asociación) Nombre = asociación.Nombre asociación.clase_inversa.tocar hacer |klass| klass.re_define_method(Nombre) hacer |recargar = false| Valor = get_relation(Nombre, asociación, nulo, recargar) Valor = enviar("build_#{nombre}") si Valor.nil? && asociación.¿autoconstruyendo? && !without_autobuild? Valor end end end |
.define_ids_getter!(association) ⇒ Clase
Define el captador para los IDs de document en la asociación. Debe especificarse solo para las asociaciones de referencias múltiples.
319 320 321 322 323 324 325 326 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 319 def sí mismo.define_ids_getter!(asociación) ids_method = "#{association.name.to_s.singularize}_ids" asociación.clase_inversa.tocar hacer |klass| klass.re_define_method(ids_method) hacer enviar(asociación.Nombre).pluck(::_id) end end end |
.define_ids_setter!(association) ⇒ Objeto
Define el método setter que le permite establecer document en esta asociación mediante sus identificaciones. El setter definido encuentra documentos con los IDs dados e invoca el setter de asociación regular con los documentos encontrados. Los definidores de IDs deben definirse solo para asociaciones múltiples referenciadas.
@param [ Mongoid::Association::Relatable ] association La asociación para la relación.
@return [ Clase ] La clase que se está configurando.
368 369 370 371 372 373 374 375 376 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 368 def sí mismo.define_ids_setter!(asociación) ids_method = "#{association.name.to_s.singularize}_ids=" asociación.clase_inversa.asociaciones_aliased[ids_method.picar] = asociación.Nombre.to_s asociación.clase_inversa.tocar hacer |klass| klass.re_define_method(ids_method) hacer |identificadores| enviar(asociación.setter, asociación.relation_class.buscar(identificadores.rechazar(&:blank?))) end end end |
.define_setter!(association) ⇒ Clase
Define el setter para la asociación. Esto hace algunas cosas según ciertas condiciones. Si existe una asociación, se realizará una sustitución de destino; de lo contrario, se creará una nueva asociación con el destino proporcionado.
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 339 def sí mismo.define_setter!(asociación) Nombre = asociación.Nombre asociación.clase_inversa.tocar hacer |klass| klass.re_define_method("#{name}=") hacer |Objeto| without_autobuild hacer si Valor = get_relation(Nombre, asociación, Objeto) Valor = compilar(Nombre, Valor, asociación) a menos que Valor.respond_to?(sustituto) establecer_relación(Nombre, Valor.sustituir(Objeto.sustituible)) else compilar(Nombre, Objeto.sustituible, asociación) end end end end end |
Detalles del método de instancia
#__build__(nombre, objeto, asociación, campos_seleccionados = nil) ⇒ Proxy
Compila el documento relacionado y crea la asociación a menos que el documento sea nulo, entonces establece la asociación en este documento.
25 26 27 28 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 25 def compilar(Nombre, Objeto, asociación, selected_fields = nulo) relación = crear_relación(Objeto, asociación, selected_fields) establecer_relación(Nombre, relación) end |
#create_relation(objeto, association, selected_fields = nil) ⇒ Proxy
Cree una asociación a partir de un objeto y metadatos de asociación.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 42 def crear_relación(Objeto, asociación, selected_fields = nulo) llave = @atributos[asociación.inverse_type] tipo = llave ? asociación.resolver.modelo_para(llave) : nulo Objetivo = si t = asociación.compilar(sí mismo, Objeto, tipo, selected_fields) asociación.crear_relación(sí mismo, t) end # Solo es necesario hacer esto en asociaciones embebidas. Las funciones de retorno pendientes # sólo se añaden al materializar los documentos, lo que sólo ocurre # sobre asociaciones integradas. No hay ninguna llamada a la base de datos en el # construcción de una asociación referenciada. si asociación. Arreglo(Objetivo).cada hacer |doc| doc.intentar(:run_pending_callbacks) end end Objetivo end |
#reset_relation_criteria(nombre) ⇒ Objeto
Restablece los criterios dentro del proxy de asociación. Utilizado por asociaciones de muchos-a-muchos para mantener sincronizado el arreglo de IDs subyacente.
69 70 71 72 73 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 69 def reset_relation_criteria(Nombre) return a menos que instance_variable_defined?("@_#{name}") enviar(Nombre).restablecer_descargado end |
#set_relation(nombre, relación) ⇒ Proxy
Establezca la asociación suministrada en una variable de instancia de la clase con el nombre proporcionado. Se utiliza como asistente solo para la limpieza del código.
85 86 87 |
# Archivo 'lib/mongoid/association/accessors.rb', línea 85 def establecer_relación(Nombre, relación) instance_variable_set("@_#{name}", relación) end |