在rails 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
有类似的东西吗?我已经完成了一堆谷歌搜索,并查看了许多文档,但还没有找到它。但是因为我不知道它叫什么,
(或许现在是时候开始深入挖掘资源了 - 我听说这是了解平台的一个好方法。再次,some say otherwise;))
答案 0 :(得分:1)
您可以手动覆盖属性的getter:
def birthday
BirthDate.parse(birthday_before_type_cast)
end