class Mongoid::Association::Referenced::HasOne::Proxy
This class defines the behavior for all associations that are a one-to-one between documents in different collections.
Public Class Methods
Instantiate a new references_one association. Will set the foreign key and the base on the inverse object.
@example Create the new association.
Referenced::One.new(base, target, association)
@param [ Document
] base The document this association hangs off of. @param [ Document
] target The target (child) of the association. @param [ Association
] association The association metadata.
# File lib/mongoid/association/referenced/has_one/proxy.rb, line 22 def initialize(base, target, association) init(base, target, association) do raise_mixed if klass.embedded? && !klass.cyclic? characterize_one(_target) bind_one _target.save if persistable? end end
Private Class Methods
# File lib/mongoid/association/referenced/has_one/proxy.rb, line 99 def eager_loader(association, docs) Eager.new(association, docs) end
Returns true if the association is an embedded one. In this case always false.
@example Is this association embedded?
Referenced::One.embedded?
@return [ false ] Always false.
@since 2.0.0.rc.1
# File lib/mongoid/association/referenced/has_one/proxy.rb, line 112 def embedded? false end
Public Instance Methods
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.
@example Nullify the association.
person.game.nullify
@since 2.0.0.rc.1
# File lib/mongoid/association/referenced/has_one/proxy.rb, line 39 def nullify unbind_one _target.save end
Substitutes the supplied target document for the existing document in the association. If the new target is nil, perform the necessary deletion.
@example Replace the association.
person.game.substitute(new_game)
@param [ Array<Document> ] replacement The replacement target.
@return [ One
] The association.
@since 2.0.0.rc.1
# File lib/mongoid/association/referenced/has_one/proxy.rb, line 56 def substitute(replacement) # If the same object currently associated is being assigned, # rebind the association and save the target but do not destroy # the target. unbind_one if persistable? # TODO can this entire method be skipped if self == replacement? if _association.destructive? && self != replacement send(_association.dependent) else save if persisted? end end HasOne::Proxy.new(_base, replacement, _association) if replacement end
Private Instance Methods
Instantiate the binding associated with this association.
@example Get the binding.
relation.binding([ address ])
@return [ Binding
] The binding object.
# File lib/mongoid/association/referenced/has_one/proxy.rb, line 81 def binding HasOne::Binding.new(_base, _target, _association) end
Are we able to persist this association?
@example Can we persist the association?
relation.persistable?
@return [ true, false ] If the association is persistable.
@since 2.1.0
# File lib/mongoid/association/referenced/has_one/proxy.rb, line 93 def persistable? _base.persisted? && !_binding? && !_building? end