модуль ActiveRecord::AttributeAssignment
Публичные методы экземпляров
# File activerecord/lib/active_record/attribute_assignment.rb, line 23
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 Позволяет задать все атрибуты, передавая хеш атрибутов с ключами, соответствующими именам атрибутов (которые, в свою очередь, соответствуют именам столбцов).
Если переданный хеш отвечает методу permitted? и возвращаемое значение этого метода является false, возникает исключение ActiveModel::ForbiddenAttributesError.
cat = Cat.new(name: "Gorby", status: "yawning")
cat.attributes # => { "name" => "Gorby", "status" => "yawning", "created_at" => nil, "updated_at" => nil}
cat.assign_attributes(status: "sleeping")
cat.attributes # => { "name" => "Gorby", "status" => "sleeping", "created_at" => nil, "updated_at" => nil }
Новые атрибуты будут сохранены в базе данных при сохранении объекта.
Псевдоним для attributes=.
Также алиас: attributes=
attributes=(new_attributes)
Псевдоним для: assign_attributes
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.