В рельсах 3 у меня есть модель базы данных с полем birthday
типа date
. По разным причинам (например, дата без известного года), я бы хотел, чтобы это был класс, отличный от Date
, и / или что-то смешанное с классом Date
для созданных только объектов. из этого атрибута . Какой лучший способ сделать это?
Например, предположим, я хочу сделать что-то вроде:
class BirthDate < Date
def to_s
case year
when 1 # if I store a date with a null year, it sets it to 1
strftime("%m/%d")
else
super
end
end
end
Этот класс дает мне поведение, которое я хочу (на данный момент; вполне возможно, что я изменю его в будущем), и я могу заставить свою модель дать мне доступ к этому, используя что-то вроде:
class Person < ActiveRecord::Base
def bday
BirthDate.new(birthday.year, birthday.month, birthday.day)
end
end
А потом просто измените мои взгляды, чтобы использовать bday вместо дня рождения. Хотя это кажется расточительным (необходимость создания нового объекта из уже созданного - не берите в голову, что Date
, похоже, не имеет типа «конструктор копирования»? (Или я просто где-то пропускаю его?)
В любом случае, я думаю, что, возможно, ActiveRecord может предоставить что-то похожее на:
class Person < ActiveRecord::Base
class_for :birthday => BirthDate
end
Есть что-нибудь подобное? Я провел несколько поисков в Google, просмотрел несколько документов и не нашел его. Но так как я не знаю, как это можно назвать,
(Возможно, пришло время начать копаться в источнике - я слышал, что это хороший способ узнать больше о платформе. С другой стороны, некоторые говорят иначе ;))