Módulo: Mongoid::Attributes::Nested::ClassMethods

Definido em:
lib/mongoid/attributes/nested.rb

Colapsode resumo constante

REJECT_ALL_BLANK_PROC =
->(attributes){
  attributes.todos? { |chave, valor| chave == '_destroy' || valor.em branco? }
}

Recolhimento do Resumo do método de instância

Detalhes do método de instância

#accepts_nested_attributes_for(*args) ⇒ Object

Usado quando é necessário atualizar modelos relacionados a partir de uma associação principal. Pode ser usado em associações incorporadas ou referenciadas.

Exemplos:

Definindo atributos aninhados.


class Person
  include Mongoid::Document

  embeds_many :addresses
  embeds_one :game
  references_many :posts

  accepts_nested_attributes_for :addresses, :game, :posts
end

Parâmetros:

  • *args (Símbolo..., Hash)

    Uma lista de nomes de associação, seguidos por um hash opcional de opções.



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# Arquivo 'lib/mongoid/attributes/nested.rb', linha 48

def accepts_nested_attributes_for(*Args)
  opções = Args.extract_options!.dup
  opções[:autosave] = true se opções[:autosave].nada?

  opções[:reject_if] = REJECT_ALL_BLANK_PROC se opções[:reject_if] == :all_white
  Args.cada fazer |name|
    meth = "#{name}_attributes="
    auto.nested_attributes["#{name}_attributes"] = meth
    associação = relações[name.to_s]
    aumentar Errors::NestedAttributesMetadataNotFound.Novo(auto, name) a menos que associação
    autosave_nested_attributes(associação) se opções[:autosave]

    re_define_method(meth) fazer |attrs|
      _assigning fazer
        se associação.polimórfico? e a associação.inverse_type
          opções = opções.mesclar!(:class_name => auto.enviar(associação.inverse_type))
        end
        associação.nested_builder(attrs, opções).COMPILAR(auto)
      end
    end
  end
end