Module: ActiveRecord::AttributeMethods::Write
- Extended by:
- ActiveSupport::Concern
- Defined in:
- activerecord/lib/active_record/attribute_methods/write.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- WriterMethodCache =
Class.new(AttributeMethodCache) { private def method_body(method_name, const_name) <<-EOMETHOD def #{method_name}(value) name = ::ActiveRecord::AttributeMethods::AttrNames::ATTR_#{const_name} write_attribute(name, value) end EOMETHOD end }.new
Instance Method Summary collapse
-
#write_attribute(attr_name, value) ⇒ Object
(also: #raw_write_attribute)
Updates the attribute identified by
attr_name
with the specifiedvalue
.
Methods included from ActiveSupport::Concern
append_features, extended, included
Instance Method Details
#write_attribute(attr_name, value) ⇒ Object Also known as: raw_write_attribute
Updates the attribute identified by attr_name
with the specified value
. Empty strings for fixnum and float columns are turned into nil
.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'activerecord/lib/active_record/attribute_methods/write.rb', line 57 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) # If we're dealing with a binary column, write the data to the cache # so we don't attempt to typecast multiple times. if column && column.binary? @attributes_cache[attr_name] = value end if column || @attributes.has_key?(attr_name) @attributes[attr_name] = type_cast_attribute_for_write(column, value) else raise ActiveModel::MissingAttributeError, "can't write unknown attribute `#{attr_name}'" end end |