2014-03-13 131 views
0

我在下列情況下,考慮在現有的網站上創建,我有其中有許多設備,如這種模式用戶:Ruby on Rails的,通過控制

has_many :devices, :through => :credits 

當我創建一個設備它創建一個信用,但是信用的一些屬性是空的。我想知道是否有辦法控制此信貸的創建,並確保爲數據庫創建的信貸中沒有空值。

在此先感謝

回答

0

推薦:在您的信用數據庫表 使用默認值。您可以使用數據庫遷移來執行此操作。

class AddDefaultValuesToCredits < ActiveRecord::Migration 
    def change 
    change_column :credits, :value1, :boolean, default: false 
    change_column :credits, :value2, :string, default: 'words' 
    # change other columns 
    end 
end 

如果value1value2沒有指定明確的價值,他們將分別默認爲false'words'

備選:您也可以在您的信用模式中設置默認值。

class Credit < ActiveRecord::Base 
    after_initialize :set_values, unless: persisted? 

    # other model code 

    def set_values 
    if self.new_record? 
     self.value1 = false if self.value.nil? # initial boolean value 
     self.value2 ||= 'words' # initial string value 
     # other values 
    end 
    end 
+0

'after_initialize'被認爲是hacky,因爲該代碼將在每個單獨的'Credit'對象初始化時「運行」。我建議只進行數據庫遷移。 –

+0

有用的信息瑞安。我想我會給出幾個選項。我會更新我的答案以反映使用遷移的建議。 –

+0

@RyanBigg你是什麼意思的「神奇」?我見過人們推薦after_initialize來設置默認值,因爲即使你只是調用'Class.new',而不像數據庫默認值 –