2016-04-26 78 views
3

說在我的模式我有寵物的屬性字段的用戶表的默認設置爲[「狗」]:的默認值在Rails的屬性

create_table "users", force: true do |t| 
    ... 
    t.text "pets",  default: ["dogs"], array: true 
    ... 

我有一個繼承模型FriendlyUser從類Userclass FriendlyUser < User

因此,當創建一個FriendlyUser時,類型爲「FriendlyUser」。但我想FriendlyUser有寵物設置爲默認的狗和貓:[「狗」,「貓」]

這是可能的遷移,或者必須這樣做在課堂上(通過覆蓋initialize方法,使用after_initialize,before_create等)?

回答

1

Rails遷移中的缺省值不是爲了處理這樣的邏輯。從數據庫方面來說,它可能是技術上可能使用觸發器基於類型列中的值填充插入數據,但這可能比它的價值更麻煩和複雜。

設置before_validation回調中的值可能是您最好的選擇。而且由於您使用的是繼承,所以您可以覆蓋子類中的回調。

1

由於STI對多個模型使用一個表,因此數據庫層中的缺省值將使模型具有不同的特性變得更加困難。因此,我認爲您應該堅持將默認值邏輯移至您的應用程序邏輯,您可以在其中定義特定於模型的行爲。