Module: ActiveModel::AttributeAssignment
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Included In:
| |
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
|
|
Defined in: | activemodel/lib/active_model/attribute_assignment.rb |
Instance Attribute Summary
-
#attributes=(new_attributes)
writeonly
Alias for #assign_attributes.
Instance Method Summary
-
#assign_attributes(new_attributes)
(also: #attributes=)
Allows you to set all the attributes by passing in a hash of attributes with keys matching the attribute names.
-
#attribute_writer_missing(name, value)
Like
BasicObject#method_missing
, #attribute_writer_missing is invoked when #assign_attributes is passed an unknown attribute name. - #_assign_attribute(k, v) private
- #_assign_attributes(attributes) private
ForbiddenAttributesProtection
- Included
Instance Attribute Details
#attributes=(new_attributes) (writeonly)
Alias for #assign_attributes.
# File 'activemodel/lib/active_model/attribute_assignment.rb', line 37
alias attributes= assign_attributes
Instance Method Details
#_assign_attribute(k, v) (private)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_assignment.rb', line 67
def _assign_attribute(k, v) setter = :"#{k}=" public_send(setter, v) rescue NoMethodError if respond_to?(setter) raise else attribute_writer_missing(k.to_s, v) end end
#_assign_attributes(attributes) (private)
[ GitHub ]# File 'activemodel/lib/active_model/attribute_assignment.rb', line 61
def _assign_attributes(attributes) attributes.each_pair do |k, v| _assign_attribute(k, v) end end
#assign_attributes(new_attributes) Also known as: #attributes=
Allows you to set all the attributes by passing in a hash of attributes with keys matching the attribute names.
If the passed hash responds to permitted?
method and the return value of this method is false
an ForbiddenAttributesError
exception is raised.
class Cat
include ActiveModel::AttributeAssignment
attr_accessor :name, :status
end
cat = Cat.new
cat.assign_attributes(name: "Gorby", status: "yawning")
cat.name # => 'Gorby'
cat.status # => 'yawning'
cat.assign_attributes(status: "sleeping")
cat.name # => 'Gorby'
cat.status # => 'sleeping'
# File 'activemodel/lib/active_model/attribute_assignment.rb', line 28
def assign_attributes(new_attributes) unless new_attributes.respond_to?(:each_pair) raise ArgumentError, "When assigning attributes, you must pass a hash as an argument, #{new_attributes.class} passed." end return if new_attributes.empty? _assign_attributes(sanitize_for_mass_assignment(new_attributes)) end
#attribute_writer_missing(name, value)
Like BasicObject#method_missing
, #attribute_writer_missing
is invoked when #assign_attributes is passed an unknown attribute name.
By default, #attribute_writer_missing
raises an UnknownAttributeError
.
class Rectangle
include ActiveModel::AttributeAssignment
attr_accessor :length, :width
def attribute_writer_missing(name, value)
Rails.logger.warn "Tried to assign to unknown attribute #{name}"
end
end
rectangle = Rectangle.new
rectangle.assign_attributes(height: 10) # => Logs "Tried to assign to unknown attribute 'height'"
# File 'activemodel/lib/active_model/attribute_assignment.rb', line 56
def attribute_writer_missing(name, value) raise UnknownAttributeError.new(self, name) end