1.MySQL不支持文本列的默认值(因此我无法使用迁移来指定默认值)
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
你能建议一个更好的解决方案吗?
答案 0 :(得分: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