Módulo: Mongoid::Association::Relatable
- Incluye:
- Restringible, Opciones
- Incluido en:
- Embedded::EmbeddedIn, Embedded::EmbedsMany, Embedded::EmbedsOne, Mongoid::Association::Referenced::BelongsTo, Mongoid::Association::Referenced::HasAndBelongsToMany, Mongoid::Association::Referenced::HasMany, Mongoid::Association::Referenced::HasOne
- Definido en:
- lib/mongoid/association/relatable.rb
Overview
Este módulo proporciona comportamientos compartidos entre los tipos de Asociación.
Resumen de constantes colapsar
- SHARED_OPTIONS =
Las opciones compartidas entre todos los tipos de asociación.
%i[ nombre_de_clase inverse_of validar Extender ].freeze
- PRIMARY_KEY_DEFAULT =
La clave primaria por defecto.
'_id'
Resumen de atributos de la instancia colapsar
-
#name ⇒ Symbol
Solo lectura
El nombre de la asociación.
-
#options ⇒ Hash
Solo lectura
Las opciones de esta asociación.
-
#owner_class ⇒ clase
Solo lectura
La clase que posee esta asociación.
-
#parent_inclusions ⇒ arreglo<String>
Las asociaciones por encima de esta en el árbol de inclusión.
Resumen del método de instancia colapsar
-
#==(otro) ⇒ Objeto
Compara esta asociación con otra.
-
#vinculable?(_doc) ⇒ verdadero | falso
Si intentar vincular un objeto mediante esta asociación debe generar un error.
-
#counter_cache_column_name ⇒ String
Obtén el nombre de la columna de la caché de contadores.
-
#create_relation(owner, target) ⇒ Proxy
Cree un objeto proxy de asociación utilizando el propietario y el objetivo.
-
#destructivo? ⇒ verdadero | falso
Si el método dependiente es destructivo.
-
#extension ⇒ Module
Obtén la extensión.
-
#foreign_key_check ⇒ String
Obtener el nombre del método para verificar si la clave externa ha cambiado.
-
#foreign_key_setter ⇒ String
El nombre del método setter de clave externa.
-
#get_callbacks(callback_type) ⇒ arreglo<Proc | Symbol>
Obtén las funciones de retorno para un tipo determinado.
-
#in_to? ⇒ true | false
¿Es esta asociación una asociación embedded_in o belongs_to?
-
#initialize(_clase, name, opts = {}, &block) ⇒ objeto
Inicializa la Asociación.
-
#inverse(other = nil) ⇒ Symbolo
Obtenga el nombre inverso.
-
#inverse_association(other = nil) ⇒ Mongoid::Association::Relatable
Obtén los metadatos de la asociación del inverso.
-
#inverse_class ⇒ String (también: #inverse_klass)
La clase del objeto que posee esta asociación.
-
#inverse_class_name ⇒ String
El nombre de clase del objeto que posee esta asociación.
-
#inverse_setter(other = nil) ⇒ String
El nombre del método setter inverso.
-
#inverse_type ⇒ nil
Obtén el tipo inverso.
-
#inverse_type_setter ⇒ String
Obtiene el setter para el campo que establece el tipo de documento en una asociación polimórfica.
-
#inversas(other = nil) ⇒ arreglo<Symbol>
Obten los nombres inversos.
-
#key ⇒ Símbolo | String
El campo de clave foránea si esta asociación almacena una clave foránea.
-
#muchos? ⇒ true | false
¿Es esta asociación una "embeds_many" o una "has_many" asociación?
-
#¿uno? ⇒ cierto | falso
¿Es esta asociación una asociación embeds_one o has_one?
-
#ruta(documento) ⇒ Mongoid::Atomic::Paths::Root
La ruta atómica para esta asociación.
-
#relation_class ⇒ String (también: #klass)
La clase del(los) objeto(s) de la asociación.
-
#relation_class_name ⇒ String (también: #class_name)
- El nombre de la clase, posiblemente no calificado o
prefijado, del/los objeto/s de la asociación.
-
#setter ⇒ String
El nombre del setter en este objeto para asignar un objeto asociado.
-
#type_setter ⇒ String
Obtener el configurador de tipos.
-
#validate? ⇒ true | false
Si los objetos asociados deben ser validados.
Métodos incluidos de Opciones
#as, #autobuilding?, #autosave, #cascading_callbacks?, #counter_cached?, #cyclic?, #dependent, #forced_nil_inverse?, #índice?, #inverse_of, #order, #polymorphic?, #primary_key, #store_as, #touch_field, #touchable?, #type
Métodos incluidos de Constrainable
Detalles de atributo de instancias
#nombre ⇒ Símbolo (solo lectura)
El nombre de la asociación.
31 32 33 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 31 def Nombre @name end |
#opciones ⇒ Hash (solo lectura)
Las opciones de esta asociación.
36 37 38 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 36 def @options end |
#owner_class ⇒ Class (solo lectura)
La clase que posee esta asociación.
41 42 43 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 41 def owner_class @owner_class end |
#parent_inclusions ⇒ Array<String>
Las asociaciones por encima de esta en el árbol de inclusión.
319 320 321 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 319 def parent_inclusions @parent_inclusions ||= [] end |
Detalles del método de instancia
#==(otra) ⇒ Objeto
Compara esta asociación con otra.
65 66 67 68 69 70 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 65 def ==(Otros) relation_class_name == Otros.relation_class_name && inverse_class_name == Otros.inverse_class_name && Nombre == Otros.Nombre && == Otros. end |
#¿vinculable?(_doc) ⇒ true | false
Si intentar vincular un objeto mediante esta asociación debe generar un error.
96 97 98 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 96 def ¿se puede vincular?(_doc) false end |
#counter_cache_column_name ⇒ String
Obtén el nombre de la columna de la caché de contadores.
275 276 277 278 279 280 281 282 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 275 def nombre_columna_cache_conteo @counter_cache_column_name ||= si @options[contador_cache].is_a?(String) || @options[contador_cache].is_a?(Símbolo) @options[contador_cache] else "#{inverse || inverse_class_name.demodulize.underscore.pluralize}_count" end end |
#create_relation(propietario, objetivo) ⇒ Proxy
Cree un objeto proxy de asociación utilizando el propietario y el objetivo.
261 262 263 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 261 def crear_relación(propietario, Objetivo) relación.Nuevo(propietario, Objetivo, sí mismo) end |
#¿destructivo? ⇒ true | false
Si el método dependiente es destructivo.
268 269 270 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 268 def ¿destructivo? @destructive ||= !!(dependiente && %i[delete_all destruir].incluir?(dependiente)) end |
#extension ⇒ Module
Obtén la extensión.
287 288 289 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 287 def Extensión @extension ||= @options[:ampliar] end |
#foreign_key_check ⇒ String
Obtener el nombre del método para verificar si la clave externa ha cambiado.
250 251 252 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 250 def foreign_key_check @foreign_key_check ||= "#{foreign_key}_previously_changed?" si ¿stores_foreign_key? && foreign_key end |
#foreign_key_setter ⇒ String
El nombre del método setter de clave externa.
220 221 222 223 224 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 220 def asignador_de_clave_foránea # note: No puedes comprobar si esta asociación almacena clave foránea # Consulta el enlace HasOne y HasMany, hacen referencia a foreign_key_setter @foreign_key_setter ||= "#{foreign_key}=" si foreign_key end |
#get_callbacks(callback_type) ⇒ arreglo<Proc | Símbolo>
Obtén las funciones de retorno para un tipo determinado.
78 79 80 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 78 def get_callbacks(tipo_de_retorno) Arreglo([tipo_de_retorno]) end |
#in_to? ⇒ verdadero | falso
¿Esta asociación es una asociación embedded_in o belongs_to?
341 342 343 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 341 def en_a? [ Referenciado::BelongsTo, Embedded::EmbeddedIn ].any? { |un(a)| is_a?(un(a)) } end |
#initialize(_class, nombre, opts = {}, &block) ⇒ Objeto
Inicializa la Asociación.
49 50 51 52 53 54 55 56 57 58 59 60 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 49 def inicializar(clase, Nombre, opciones = {}, &bloque) @owner_class = clase @name = Nombre @options = opciones @extension = nulo @module_path = clase.Nombre ? clase.Nombre.división('::')[0..-2].unirse('::') : '' @module_path << '::' a menos que @module_path.¿vacío? crear_extensión!(&bloque) validate! end |
#inverse(other = nil) ⇒ Símbolo
Obtenga el nombre inverso.
294 295 296 297 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 294 def inversa(Otros = nulo) candidatos = inversos(Otros) candidatos.detectar { |C| C } si candidatos end |
#inverse_association(other = nil) ⇒ Mongoid::Association::Relatable
Obtén los metadatos de la asociación del inverso.
123 124 125 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 123 def asociación inversa(Otros = nulo) (Otros || relation_class).relaciones[inversa(Otros)] end |
#inverse_class ⇒ String También conocido como: inverse_klass
La clase del objeto que posee esta asociación.
190 191 192 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 190 def clase_inversa @owner_class end |
#inverse_class_name ⇒ String
El nombre de clase del objeto que posee esta asociación.
183 184 185 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 183 def inverse_class_name @inverse_class_name ||= @owner_class.Nombre end |
#inverse_setter(other = nil) ⇒ String
El nombre del método setter inverso.
213 214 215 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 213 def inverse_setter(Otros = nulo) @inverse_setter ||= "#{inversos(otro).primero}=" a menos que inversos(Otros).blank? end |
#inverse_type ⇒ nil
Obtén el tipo inverso.
130
|
# Archivo 'lib/mongoid/association/relatable.rb', línea 130 def inverse_type; end |
#inverse_type_setter ⇒ String
Obtiene el setter para el campo que establece el tipo de documento en una asociación polimórfica.
240 241 242 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 240 def inverse_type_setter @inverse_type_setter ||= "#{inverse_type}=" si inverse_type end |
# inversos(otro = nil)⇒ arreglo<Símbolo><Symbol>
Obten los nombres inversos.
106 107 108 109 110 111 112 113 114 115 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 106 def inversos(Otros = nulo) return [ inverse_of ] si inverse_of return [] si @options.key?(:inverso_de) && !inverse_of si polimórfico? inversos polimórficos(Otros) else determinar_inversos(Otros) end end |
#clave ⇒ Símbolo | string
El campo de clave externa si esta asociación almacena una clave externa. De lo contrario, la llave primaria.
199 200 201 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 199 def llave ¿stores_foreign_key? ? foreign_key : clave_primaria end |
#muchos? ⇒ verdadero | falso
¿Esta asociación es una asociación embeds_many o has_many?
326 327 328 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 326 def ¿muchos? [ Referenciado::HasMany, Embedded::EmbedsMany ].any? { |un(a)| is_a?(un(a)) } end |
#¿one? ⇒ verdadero | falso
¿Esta asociación es una asociación embeds_one o has_one?
333 334 335 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 333 def ¿uno? [ Referenciado::HasOne, Embedded::EmbedsOne ].any? { |un(a)| is_a?(un(a)) } end |
#path(documento) ⇒ Mongoid::Atomic::Paths::Root
La ruta atómica para esta asociación.
229 230 231 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 229 def ruta(Documento) relación.ruta(Documento) end |
#relation_class ⇒ string También conocido como: klass
La clase del(los) objeto(s) de la asociación.
Este método devuelve la instancia de clase correspondiente a relation_class_name, resuelta con relación a la clase de documento host.
Si la clase no existe, este método genera NameError. Esto puede suceder si la clase objetivo aún no ha sido definida. Tenga en cuenta que, en general, las asociaciones polimórficas no tienen una clase objetivo bien definida porque la clase objetivo puede cambiar de un objeto a otro, y llamar a este método en una asociación polimórfica generalmente fallará con un NameError o producirá resultados engañosos (si una clase resulta estar definida con el mismo nombre que el nombre de la asociación).
172 173 174 175 176 177 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 172 def relation_class @klass ||= begin cls_name = @options[class_name:] || ActiveSupport::Inflector.clasificar(Nombre) resolver_nombre(clase_inversa, cls_name) end end |
#relation_class_name ⇒ String También conocido como: class_name
El valor de retorno de este método no debe utilizarse para determinar si dos asociaciones tienen la misma clase objetivo, ya que el valor de retorno no siempre es un nombre de clase completamente calificado. Para comparar clases, recupera la instancia de clase del objetivo de la asociación utilizando el método relation_class.
- El nombre de la clase, posiblemente no calificado o
prefijada, de la asociación
objeto/s.
Este método retorna el nombre de la clase tal como se usa en la definición de la asociación. Si se proporciona la opción :class_name en la asociación, se retorna exactamente el valor de esa opción aquí. Si no se proporciona la opción :class_name, el nombre de la clase se calcula a partir del nombre de la asociación, pero no se resuelve a la clase real.
El nombre de clase que devuelve este método puede no corresponder a una clase definida, ya sea porque la clase correspondiente no se ha cargado aún, o porque la asociación hace referencia a una clase que no existe en absoluto. Para obtener la clase de asociación, utiliza el método relation_class.
153 154 155 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 153 def relation_class_name @class_name ||= @options[class_name:] || ActiveSupport::Inflector.clasificar(Nombre) end |
#setter ⇒ String
El nombre del setter en este objeto para asignar un objeto asociado.
206 207 208 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 206 def setter @setter ||= "#{name}=" end |
#type_setter ⇒ String
Solo es relevante para asociaciones polimórficas que toman la opción :as.
Obtener el configurador de tipos.
86 87 88 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 86 def type_setter @type_setter ||= "#{tipo}=" si tipo end |
#¿validar? ⇒ verdadero | falso
Si los objetos asociados deben ser validados.
303 304 305 306 307 308 309 |
# Archivo 'lib/mongoid/association/relatable.rb', línea 303 def validate? @validate ||= si @options[: valide].nil? validation_default else !!@options[: valide] end end |