2012-08-03 29 views
0

1.MySQL不支持文本列(所以我不能使用遷移到指定默認值)如何在Rails中爲文本列定義默認列值?

2.默認值,下面的代碼

after_initialize do |obj| 
    obj.column1 ||= "default_value" 
end 

是馬車。例如。它將覆蓋顯式指定值以下情況:MyModel.new(column1: nil)MyModel.new { |obj| obj.column1 = nil }

所以只有簡單或多或少正確的做法是我能想到的是:

after_initialize do |obj| 
    obj.column1 ="default_value" if obj.new_record? and !obj.column1_changed? 
end 

你能提出一個更好的解決方案?

回答

1

爲什麼不使用before_validation回調?

before_validation(on: :create) do 
    self.column1 != "default value" 
end 

更新

你還能避免new_record? :)

before_validation(on: :create) do 
    self.column1 = "default value" unless self.column1_changed? 
end 
+0

這也是越野車的解決方案。考慮一下情況:MyModel.new(column1:nil)和MyModel.new {| obj | obj.column1 = nil} – Alexey 2012-08-03 16:49:42

+0

對不起。現在我明白你的意思了。通常我不希望用戶設置一個零值,當我想要設置一個默認值。我認爲沒有辦法檢查列是否被明確指定爲零,然後使用'_changed?'方法。 – 2012-08-03 16:57:49

相關問題