Est*_*has 1 ruby ruby-on-rails callback
我在我的模型上有这样的陈述:
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
Run Code Online (Sandbox Code Playgroud)
我打电话的时候:
Question.create
Run Code Online (Sandbox Code Playgroud)
它输出我:
#<Question id:nil, closed: false>
Run Code Online (Sandbox Code Playgroud)
如果我将函数修改为:
def ensure_default_data
self.closed = 0 if self.closed.nil?
end
Run Code Online (Sandbox Code Playgroud)
有用!
有人对它有任何想法,为什么第一个功能不起作用?
我正在使用PostgreSQL,我的字段是布尔值.
您的回调阻止了模型的保存.来自http://apidock.com/rails/ActiveRecord/Callbacks:
如果before_validation回调的返回值可以被评估为false,则进程将被中止,Base#save将返回false.如果Base#save!被调用它会引发一个ActiveRecord :: RecordInvalid异常.什么都不会附加到errors对象.
如果self.closed不是nil你的回调函数返回的值self.closed.nil?(即false),从而停止从发生的拯救.要防止这种情况,请确保返回true:
def ensure_default_data
self.closed = false if self.closed.nil?
true
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |