Module: Mongoid::NestedAttributes::ClassMethods

Defined in:
lib/mongoid/nested_attributes.rb

Overview

:nodoc:

Constant Summary collapse

REJECT_ALL_BLANK_PROC =
proc { |attributes| attributes.all? { |key, value| key == '_destroy' || value.blank? } }

Instance Method Summary collapse

Instance Method Details

#accepts_nested_attributes_for(*args) ⇒ Object

Used when needing to update related models from a parent relation. Can be used on embedded or referenced relations.

Examples:

Defining nested attributes.


class Person
  include Mongoid::Document

  embeds_many :addresses
  embeds_one :game
  references_many :posts

  accepts_nested_attributes_for :addresses, :game, :posts
end

Parameters:

  • *args (Array<Symbol>, Hash)

    A list of relation names, followed by a hash of options.



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/mongoid/nested_attributes.rb', line 39

def accepts_nested_attributes_for(*args)
  options = args.extract_options!
  options[:reject_if] = REJECT_ALL_BLANK_PROC if options[:reject_if] == :all_blank
  args.each do |name|
    self.nested_attributes += [ "#{name}_attributes=" ]
    define_method("#{name}_attributes=") do |attrs|
      _assigning do
        relation = relations[name.to_s]
        relation.nested_builder(attrs, options).build(self)
      end
    end
  end
end