Class: Mongoid::Association::Nested::One
- Inherits:
-
Object
- Object
- Mongoid::Association::Nested::One
- Includes:
- Buildable
- Defined in:
- lib/mongoid/association/nested/one.rb
Overview
Builder class used to perform #accepts_nested_attributes_for attribute assignment on one-to-n associations.
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.
52 53 54 55 56 57 58 |
# File 'lib/mongoid/association/nested/one.rb', line 52 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.
13 14 15 |
# File 'lib/mongoid/association/nested/one.rb', line 13 def destroy @destroy end |
Instance Method Details
#build(parent) ⇒ Document
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.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/mongoid/association/nested/one.rb', line 28 def build(parent) return if reject?(parent, attributes) @existing = parent.send(association.name) if update? delete_id(attributes) 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 |