Module: Her::Model::NestedAttributes::ClassMethods

Defined in:
lib/castle-her/model/nested_attributes.rb

Instance Method Summary collapse

Instance Method Details

#accepts_nested_attributes_for(*associations) ⇒ Object

Allow nested attributes for an association

Examples:

class User
  include Her::Model

  has_one :role
  accepts_nested_attributes_for :role
end

class Role
  include Her::Model
end

user = User.new(name: "Tobias", role_attributes: { title: "moderator" })
user.role # => #<Role title="moderator">


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/castle-her/model/nested_attributes.rb', line 23

def accepts_nested_attributes_for(*associations)
  allowed_association_names = association_names

  associations.each do |association_name|
    unless allowed_association_names.include?(association_name)
      raise Her::Errors::AssociationUnknownError.new("Unknown association name :#{association_name}")
    end

    class_eval <<-RUBY, __FILE__, __LINE__ + 1
      if method_defined?(:#{association_name}_attributes=)
        remove_method(:#{association_name}_attributes=)
      end

      def #{association_name}_attributes=(attributes)
        self.#{association_name}.assign_nested_attributes(attributes)
      end
    RUBY
  end
end