module ActiveRecord::AttributeAssignment

def assign_attributes(new_attributes)

exception is raised.
of this method is +false+ an ActiveModel::ForbiddenAttributesError
If the passed hash responds to permitted? method and the return value

keys matching the attribute names (which again matches the column names).
Allows you to set all the attributes by passing in a hash of attributes with
def assign_attributes(new_attributes)
  if !new_attributes.respond_to?(:stringify_keys)
    raise ArgumentError, "When assigning attributes, you must pass a hash as an argument."
  end
  return if new_attributes.blank?
  attributes                  = new_attributes.stringify_keys
  multi_parameter_attributes  = []
  nested_parameter_attributes = []
  attributes = sanitize_for_mass_assignment(attributes)
  attributes.each do |k, v|
    if k.include?("(")
      multi_parameter_attributes << [ k, v ]
    elsif v.is_a?(Hash)
      nested_parameter_attributes << [ k, v ]
    else
      _assign_attribute(k, v)
    end
  end
  assign_nested_parameter_attributes(nested_parameter_attributes) unless nested_parameter_attributes.empty?
  assign_multiparameter_attributes(multi_parameter_attributes) unless multi_parameter_attributes.empty?
end