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

Чтобы понять railsactiverecordtype_cast в деталях, пожалуйста, посетите эти три сайта

1) Блог Thoughtbot Как работает литье типов в Rails

2) Кин Коллинз в ActiveRecord 4.2.

3) Рельсы activerecord метод typecast в github

Другие вопросы по тегам