在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