0

1.MySQL不支持文本列的默认值(所以不能使用migration指定默认值)

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

你能提出一个更好的解决方案吗?

4

1 回答 1

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
于 2012-08-03T16:46:58.623 回答