我在我的模型上有这个陈述:
class Question
validates :closed, :inclusion => { :in => [false, true] }
before_validation :ensure_default_data
def ensure_default_data
self.closed = false if self.closed.nil?
end
end
我打电话的时候:
Question.create
它输出我:
#<Question id:nil, closed: false>
如果我将功能修改为:
def ensure_default_data
self.closed = 0 if self.closed.nil?
end
有效!
有人对此有任何想法,为什么第一个功能不起作用?
我正在使用PostgreSQL,我的字段是布尔值。
答案 0 :(得分:6)
您的回调阻止了模型的保存。来自http://apidock.com/rails/ActiveRecord/Callbacks:
如果返回值为 before_validation可以回调 评估为假,过程将 中止,Base#save将返回 假。如果Base#save!它会被称为 提出一个ActiveRecord :: RecordInvalid 例外。什么都不会附加 错误对象。
当self.closed
不是nil
时,您的回调会返回self.closed.nil?
的值(即false
),从而阻止保存发生。为防止这种情况,请确保返回true:
def ensure_default_data
self.closed = false if self.closed.nil?
true
end