Class: Mongoid::Association::Nested::One
- Inherits:
-
Object
- Object
- Mongoid::Association::Nested::One
- Includes:
- Buildable
- Defined in:
- lib/mongoid/association/nested/one.rb
Instance Attribute Summary collapse
-
#destroy ⇒ Object
Returns the value of attribute destroy.
Attributes included from Buildable
#association, #attributes, #existing, #options
Instance Method Summary collapse
-
#build(parent) ⇒ Document
Builds the association depending on the attributes and the options passed to the macro.
-
#initialize(association, attributes, options) ⇒ One
constructor
Create the new builder for nested attributes on one-to-one associations.
Methods included from Buildable
#allow_destroy?, #convert_id, #reject?, #update_only?
Constructor Details
#initialize(association, attributes, options) ⇒ One
Create the new builder for nested attributes on one-to-one associations.
49 50 51 52 53 54 55 |
# File 'lib/mongoid/association/nested/one.rb', line 49 def initialize(association, attributes, ) @attributes = attributes.with_indifferent_access @association = association @options = @class_name = [:class_name] ? [:class_name].constantize : association.klass @destroy = @attributes.delete(:_destroy) end |
Instance Attribute Details
#destroy ⇒ Object
Returns the value of attribute destroy.
9 10 11 |
# File 'lib/mongoid/association/nested/one.rb', line 9 def destroy @destroy end |
Instance Method Details
#build(parent) ⇒ Document
Note:
This attempts to perform 3 operations, either one of an update of the existing association, a replacement of the association with a new document, or a removal of the association.
Builds the association depending on the attributes and the options passed to the macro.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/mongoid/association/nested/one.rb', line 25 def build(parent) return if reject?(parent, attributes) @existing = parent.send(association.name) if update? attributes.delete_id existing.assign_attributes(attributes) elsif replace? parent.send(association.setter, Factory.build(@class_name, attributes)) elsif delete? parent.send(association.setter, nil) else check_for_id_violation! end end |