Class: Mongoid::Relations::Referenced::One
- Defined in:
- lib/mongoid/relations/referenced/one.rb
Overview
This class defines the behaviour for all relations that are a one-to-one between documents in different collections.
Instance Attribute Summary
Attributes inherited from Proxy
#base, #loaded, #metadata, #target
Class Method Summary collapse
-
.builder(base, meta, object) ⇒ Builder
Return the builder that is responsible for generating the documents that will be used by this relation.
-
.criteria(metadata, object, type = nil) ⇒ Criteria
Get the standard criteria used for querying this relation.
-
.eager_load(metadata, ids) ⇒ Criteria
Get the criteria that is used to eager load a relation of this type.
-
.embedded? ⇒ false
Returns true if the relation is an embedded one.
-
.foreign_key(name) ⇒ String
Get the foreign key for the provided name.
-
.foreign_key_default ⇒ nil
Get the default value for the foreign key.
-
.foreign_key_suffix ⇒ String
Returns the suffix of the foreign key field, either “_id” or “_ids”.
-
.macro ⇒ Symbol
Returns the macro for this relation.
-
.nested_builder(metadata, attributes, options) ⇒ NestedBuilder
Return the nested builder that is responsible for generating the documents that will be used by this relation.
-
.path(document) ⇒ Root
Get the path calculator for the supplied document.
-
.stores_foreign_key? ⇒ false
Tells the caller if this relation is one that stores the foreign key on its own objects.
-
.valid_options ⇒ Array<Symbol>
Get the valid options allowed with this relation.
-
.validation_default ⇒ true, false
Get the default validation setting for the relation.
Instance Method Summary collapse
-
#initialize(base, target, metadata) ⇒ One
constructor
Instantiate a new references_one relation.
-
#nullify ⇒ Object
Removes the association between the base document and the target document by deleting the foreign key and the reference, orphaning the target document in the process.
-
#substitute(replacement) ⇒ One
Substitutes the supplied target document for the existing document in the relation.
Methods inherited from One
#__evolve_object_id__, #clear, #in_memory, #respond_to?
Methods inherited from Proxy
apply_ordering, eager_load_ids, #init, #klass, #reset_unloaded, #substitutable, #with
Methods included from Marshalable
Constructor Details
#initialize(base, target, metadata) ⇒ One
Instantiate a new references_one relation. Will set the foreign key and the base on the inverse object.
19 20 21 22 23 24 25 26 |
# File 'lib/mongoid/relations/referenced/one.rb', line 19 def initialize(base, target, ) init(base, target, ) do raise_mixed if klass. && !klass.cyclic? characterize_one(target) bind_one target.save if persistable? end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Mongoid::Relations::Proxy
Class Method Details
.builder(base, meta, object) ⇒ Builder
Return the builder that is responsible for generating the documents that will be used by this relation.
107 108 109 |
# File 'lib/mongoid/relations/referenced/one.rb', line 107 def builder(base, , object) Builders::Referenced::One.new(base, , object) end |
.criteria(metadata, object, type = nil) ⇒ Criteria
Get the standard criteria used for querying this relation.
123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/mongoid/relations/referenced/one.rb', line 123 def criteria(, object, type = nil) crit = .klass.where(.foreign_key => object) if .polymorphic? crit = crit.where(.type => type.name) end = .(.klass) if .inverse_of_field crit = crit.any_in(.inverse_of_field => [.name, nil]) end crit end |
.eager_load(metadata, ids) ⇒ Criteria
Get the criteria that is used to eager load a relation of this type.
150 151 152 |
# File 'lib/mongoid/relations/referenced/one.rb', line 150 def eager_load(, ids) eager_load_ids(, ids) { |doc, key| IdentityMap.set_one(doc, key) } end |
.embedded? ⇒ false
Returns true if the relation is an embedded one. In this case always false.
163 164 165 |
# File 'lib/mongoid/relations/referenced/one.rb', line 163 def false end |
.foreign_key(name) ⇒ String
Get the foreign key for the provided name.
177 178 179 |
# File 'lib/mongoid/relations/referenced/one.rb', line 177 def foreign_key(name) "#{name}#{foreign_key_suffix}" end |
.foreign_key_default ⇒ nil
Get the default value for the foreign key.
189 190 191 |
# File 'lib/mongoid/relations/referenced/one.rb', line 189 def foreign_key_default nil end |
.foreign_key_suffix ⇒ String
Returns the suffix of the foreign key field, either “_id” or “_ids”.
201 202 203 |
# File 'lib/mongoid/relations/referenced/one.rb', line 201 def foreign_key_suffix "_id" end |
.macro ⇒ Symbol
Returns the macro for this relation. Used mostly as a helper in reflection.
212 213 214 |
# File 'lib/mongoid/relations/referenced/one.rb', line 212 def macro :has_one end |
.nested_builder(metadata, attributes, options) ⇒ NestedBuilder
Return the nested builder that is responsible for generating the documents that will be used by this relation.
238 239 240 |
# File 'lib/mongoid/relations/referenced/one.rb', line 238 def nested_builder(, attributes, ) Builders::NestedAttributes::One.new(, attributes, ) end |
.path(document) ⇒ Root
Get the path calculator for the supplied document.
252 253 254 |
# File 'lib/mongoid/relations/referenced/one.rb', line 252 def path(document) Mongoid::Atomic::Paths::Root.new(document) end |
.stores_foreign_key? ⇒ false
Tells the caller if this relation is one that stores the foreign key on its own objects.
265 266 267 |
# File 'lib/mongoid/relations/referenced/one.rb', line 265 def stores_foreign_key? false end |
.valid_options ⇒ Array<Symbol>
Get the valid options allowed with this relation.
277 278 279 |
# File 'lib/mongoid/relations/referenced/one.rb', line 277 def [ :as, :autobuild, :autosave, :dependent, :foreign_key, :primary_key ] end |
.validation_default ⇒ true, false
Get the default validation setting for the relation. Determines if by default a validates associated will occur.
290 291 292 |
# File 'lib/mongoid/relations/referenced/one.rb', line 290 def validation_default true end |
Instance Method Details
#nullify ⇒ Object
Removes the association between the base document and the target document by deleting the foreign key and the reference, orphaning the target document in the process.
36 37 38 39 |
# File 'lib/mongoid/relations/referenced/one.rb', line 36 def nullify unbind_one target.save end |
#substitute(replacement) ⇒ One
Substitutes the supplied target document for the existing document in the relation. If the new target is nil, perform the necessary deletion.
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/mongoid/relations/referenced/one.rb', line 53 def substitute(replacement) unbind_one if persistable? if .destructive? send(.dependent) else save if persisted? end end One.new(base, replacement, ) if replacement end |