我們有一個ActiveRecord模型,其列具有一些默認值。它也有一個驗證條件,如果'profile'屬性被設置爲一個不同的值,那麼默認值是無效的。是否可以確定是否設置了ActiveRecord屬性,而不是默認設置?
我希望能夠確定是否已將屬性設置爲,因爲它們被設置爲默認,以便我可以在驗證之前將它們重置爲新的有效值。
這可能嗎?
更新:我不清楚我的意思,所以我應該給代碼示例。
表的定義是這樣的:
t.column :profile, :string
t.column :contact_by, :string, :default => "phone", :null => false
驗證是這樣的:
validate :validate_contact_by_for_profile1
def validate_contact_by
if (profile == "profile1") && (contact_by != "email")
errors.add(:contact_by, " must be 'email' for users in profile1")
end
end
因此,任何時候我們這樣做:
u = User.new
u.profile => profile1
我們結束了u
無效。我最終想要的是用戶的contact_by默認爲「電話」,但如果他們的個人資料被設置爲profile1,那麼它將更改爲「電子郵件」,除非在此期間已將其設置爲某種內容。 (理想情況下這包括將其設置爲「手機」)
如何這些默認值設定?在保存之前,您可以確定是否更改了值,但這取決於您如何設置默認值。它不應該在gui方面解決嗎?選擇不同的配置文件,字段應該變爲空/重置? – nathanvda 2010-06-22 16:25:47
默認值來自數據庫中的表格。gui-side解決方案在單元測試中不會幫助我。 – Simon 2010-06-22 16:27:32