module ActiveRecord::AttributeMethods::Write
Public Instance Methods
write_attribute(attr_name, value)
click to toggle source
Updates the attribute identified by attr_name
with the
specified value
. Empty strings for fixnum and float columns
are turned into nil
.
# File lib/active_record/attribute_methods/write.rb, line 25 def write_attribute(attr_name, value) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name == 'id' && self.class.primary_key @attributes_cache.delete(attr_name) column = column_for_attribute(attr_name) unless column || @attributes.has_key?(attr_name) ActiveSupport::Deprecation.warn( "You're trying to create an attribute `#{attr_name}'. Writing arbitrary " "attributes on a model is deprecated. Please just use `attr_writer` etc." ) end @attributes[attr_name] = type_cast_attribute_for_write(column, value) end
Also aliased as: raw_write_attribute
Private Instance Methods
attribute=(attribute_name, value)
click to toggle source
Handle *= for method_missing.
# File lib/active_record/attribute_methods/write.rb, line 44 def attribute=(attribute_name, value) write_attribute(attribute_name, value) end
convert_number_column_value(value)
click to toggle source
# File lib/active_record/attribute_methods/write.rb, line 56 def convert_number_column_value(value) case value when FalseClass 0 when TrueClass 1 when String value.presence else value end end
type_cast_attribute_for_write(column, value)
click to toggle source
# File lib/active_record/attribute_methods/write.rb, line 48 def type_cast_attribute_for_write(column, value) if column && column.number? convert_number_column_value(value) else value end end