Module: Mongoid::Association::Builders
- Extended by:
- ActiveSupport::Concern
- Included in:
- Mongoid::Association
- Defined in:
- lib/mongoid/association/builders.rb
Overview
This module is responsible for defining the build and create methods used in one to one associations.
Class Method Summary collapse
-
.define_builder!(association) ⇒ Class
Defines a builder method.
-
.define_creator!(association) ⇒ Class
Defines a creator method.
Class Method Details
.define_builder!(association) ⇒ Class
Defines a builder method. This is defined as #build_name.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/mongoid/association/builders.rb', line 46 def self.define_builder!(association) association.inverse_class.tap do |klass| klass.re_define_method("build_#{association.name}") do |*args| attributes, = parse_args(*args) document = Factory.execute_build(association.relation_class, attributes, execute_callbacks: false) _building do child = send("#{association.name}=", document) child.run_pending_callbacks child.run_callbacks(:build) child end end end end |
.define_creator!(association) ⇒ Class
Defines a creator method. This is defined as #create_name. After the object is built it will immediately save.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/mongoid/association/builders.rb', line 70 def self.define_creator!(association) association.inverse_class.tap do |klass| klass.re_define_method("create_#{association.name}") do |*args| attributes, = parse_args(*args) document = Factory.execute_build(association.relation_class, attributes, execute_callbacks: false) doc = _assigning do send("#{association.name}=", document) end doc.run_pending_callbacks doc.save save if new_record? && association.stores_foreign_key? doc end end end |