Rails: почему update_attribute автоматически конвертирует типы
Например, скажем, у меня есть модель User с целочисленным столбцом 'pet_id'.
Если я бегу
user = User.new
user.update_attribute(:pet_id, '1')
Он автоматически преобразует строку "1" в целое число 1. Где происходит это преобразование?
1 ответ
Решение
Это метод, ответственный за type_cast
в активной записи
def type_cast(value)
return nil if value.nil?
return coder.load(value) if encoded?
klass = self.class
case type
when :string, :text then value
when :integer then klass.value_to_integer(value)
when :float then value.to_f
when :decimal then klass.value_to_decimal(value)
when :datetime, :timestamp then klass.string_to_time(value)
when :time then klass.string_to_dummy_time(value)
when :date then klass.value_to_date(value)
when :binary then klass.binary_to_string(value)
when :boolean then klass.value_to_boolean(value)
else value
end
end
Чтобы понять rails
activerecord
type_cast
в деталях, пожалуйста, посетите эти три сайта
1) Блог Thoughtbot Как работает литье типов в Rails
2) Кин Коллинз в ActiveRecord 4.2.