Все значения колонок в балице автоматически дочтупный через базовые аксесоры для Active Record объекта, но иногда вам необходимо создать какоето свое поведение для этой колонки. Это можно легко осуществить с помощью переписывания дефолтных аксесоров (используя те же самые названия как атрибуты) и вызывая метод read_attribute(attr_name) и write_attribute(attr_name, value) для реального изменения их.
Пример:
class Song < ActiveRecord::Base
# Преобразовываем числов в минуты и обрабоно для хранения в базе
def length=(minutes)
write_attribute(:length, minutes.to_i * 60)
end
def length
read_attribute(:length) / 60
end
end
Вы можете в качестве альтернативы использовать self[:attribute]=(value) и self[:attribute] вместо write_attribute(:attribute, value) и read_attribute(:attribute) как коротку форму записи.