在rails 3中,我有一个数据库模型,它有一个birthday
字段,类型为date
。由于各种原因(例如没有已知年份的日期),我希望这是除Date
之外的其他类别,并且/或者将Date
类别中的某些东西与类别中的某个对象混合使用,但只能使用此属性创建的对象。什么是最好的方式去做这件事?rails/ActiveRecord:如何为特定属性指定不同的类?
例如,假设我想要做的事,如:
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
有没有这样的事情我已经做了一堆的谷歌搜索,并通过多项文件的观看,还没有找到它,但因为我不知道它可能叫什么,所以
(也许是时候开始挖掘thr尽管来源 - 我听说这是了解更多关于平台的好方法。话又说回来,some say otherwise;))
为什么不使用一个混合您的Person类,免去您的“生日”访问? – 2011-03-03 02:02:10