0
我在下列情況下,考慮在現有的網站上創建,我有其中有許多設備,如這種模式用戶:Ruby on Rails的,通過控制
has_many :devices, :through => :credits
當我創建一個設備它創建一個信用,但是信用的一些屬性是空的。我想知道是否有辦法控制此信貸的創建,並確保爲數據庫創建的信貸中沒有空值。
在此先感謝
我在下列情況下,考慮在現有的網站上創建,我有其中有許多設備,如這種模式用戶:Ruby on Rails的,通過控制
has_many :devices, :through => :credits
當我創建一個設備它創建一個信用,但是信用的一些屬性是空的。我想知道是否有辦法控制此信貸的創建,並確保爲數據庫創建的信貸中沒有空值。
在此先感謝
推薦:在您的信用數據庫表 使用默認值。您可以使用數據庫遷移來執行此操作。
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
如果value1
或value2
沒有指定明確的價值,他們將分別默認爲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
'after_initialize'被認爲是hacky,因爲該代碼將在每個單獨的'Credit'對象初始化時「運行」。我建議只進行數據庫遷移。 –
有用的信息瑞安。我想我會給出幾個選項。我會更新我的答案以反映使用遷移的建議。 –
@RyanBigg你是什麼意思的「神奇」?我見過人們推薦after_initialize來設置默認值,因爲即使你只是調用'Class.new',而不像數據庫默認值 –