Class: Mongoid::Relations::Referenced::In
- Includes:
- Evolvable
- Defined in:
- lib/mongoid/relations/referenced/in.rb
Overview
This class handles all behaviour for relations that are either one-to-many or one-to-one, where the foreign key is store on this side of the relation and the reference is to document(s) in another collection.
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? ⇒ true
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) ⇒ In
constructor
Instantiate a new referenced_in 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) ⇒ In?
Substitutes the supplied target documents for the existing document in the relation.
Methods included from Evolvable
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) ⇒ In
Instantiate a new referenced_in relation.
22 23 24 25 26 27 |
# File 'lib/mongoid/relations/referenced/in.rb', line 22 def initialize(base, target, ) init(base, target, ) do characterize_one(target) bind_one 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.
122 123 124 |
# File 'lib/mongoid/relations/referenced/in.rb', line 122 def builder(base, , object) Builders::Referenced::In.new(base, , object) end |
.criteria(metadata, object, type = nil) ⇒ Criteria
Get the standard criteria used for querying this relation.
138 139 140 |
# File 'lib/mongoid/relations/referenced/in.rb', line 138 def criteria(, object, type = nil) type.where(.primary_key => object) end |
.eager_load(metadata, ids) ⇒ Criteria
Get the criteria that is used to eager load a relation of this type.
154 155 156 157 158 159 160 |
# File 'lib/mongoid/relations/referenced/in.rb', line 154 def eager_load(, ids) raise Errors::EagerLoad.new(.name) if .polymorphic? klass, _ = .klass, .foreign_key klass.any_in("_id" => ids.uniq).each do |doc| IdentityMap.set(doc) end end |
.embedded? ⇒ false
Returns true if the relation is an embedded one. In this case always false.
171 172 173 |
# File 'lib/mongoid/relations/referenced/in.rb', line 171 def false end |
.foreign_key(name) ⇒ String
Get the foreign key for the provided name.
185 186 187 |
# File 'lib/mongoid/relations/referenced/in.rb', line 185 def foreign_key(name) "#{name}#{foreign_key_suffix}" end |
.foreign_key_default ⇒ nil
Get the default value for the foreign key.
197 198 199 |
# File 'lib/mongoid/relations/referenced/in.rb', line 197 def foreign_key_default nil end |
.foreign_key_suffix ⇒ String
Returns the suffix of the foreign key field, either “_id” or “_ids”.
209 210 211 |
# File 'lib/mongoid/relations/referenced/in.rb', line 209 def foreign_key_suffix "_id" end |
.macro ⇒ Symbol
Returns the macro for this relation. Used mostly as a helper in reflection.
220 221 222 |
# File 'lib/mongoid/relations/referenced/in.rb', line 220 def macro :belongs_to 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.
246 247 248 |
# File 'lib/mongoid/relations/referenced/in.rb', line 246 def nested_builder(, attributes, ) Builders::NestedAttributes::One.new(, attributes, ) end |
.path(document) ⇒ Root
Get the path calculator for the supplied document.
260 261 262 |
# File 'lib/mongoid/relations/referenced/in.rb', line 260 def path(document) Mongoid::Atomic::Paths::Root.new(document) end |
.stores_foreign_key? ⇒ true
Tells the caller if this relation is one that stores the foreign key on its own objects.
273 274 275 |
# File 'lib/mongoid/relations/referenced/in.rb', line 273 def stores_foreign_key? true end |
.valid_options ⇒ Array<Symbol>
Get the valid options allowed with this relation.
285 286 287 288 289 290 291 292 293 294 295 296 |
# File 'lib/mongoid/relations/referenced/in.rb', line 285 def [ :autobuild, :autosave, :dependent, :foreign_key, :index, :polymorphic, :primary_key, :touch ] end |
.validation_default ⇒ true, false
Get the default validation setting for the relation. Determines if by default a validates associated will occur.
307 308 309 |
# File 'lib/mongoid/relations/referenced/in.rb', line 307 def validation_default false 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/in.rb', line 36 def nullify unbind_one target.save end |
#substitute(replacement) ⇒ In?
Substitutes the supplied target documents for the existing document in the relation.
53 54 55 56 57 58 59 |
# File 'lib/mongoid/relations/referenced/in.rb', line 53 def substitute(replacement) unbind_one return nil unless replacement self.target = normalize(replacement) bind_one self end |