如何在Rails中为文本列定义默认列值?

时间:2012-08-03 16:41:40

标签: ruby-on-rails activerecord

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

你能建议一个更好的解决方案吗?

1 个答案:

答案 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