0

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

より良い解決策を提案できますか?

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 に答える