我有一个模型对象,其 .save 返回错误。它随后有一个 .errors 属性,它是一个空哈希。散列不应该包含出错的列表吗?我还能如何确定保存不起作用的原因?
泰,弗雷德
我有一个模型对象,其 .save 返回错误。它随后有一个 .errors 属性,它是一个空哈希。散列不应该包含出错的列表吗?我还能如何确定保存不起作用的原因?
泰,弗雷德
这意味着您的回调之一可能正在停止保存,但没有列出验证错误。
检查返回值,尤其是任何before_
回调,并确保它们没有返回false
如果它们返回false
,则活动记录将停止未来的回调并从保存中返回 false。
您可以在“取消回调”下阅读一些关于它的信息
1) 禁用before_create、before_save、before_update并检查它保存一天的位置
2) 如果回滚是由其中一种方法引起的,请在您不打算回滚时检查这些方法是否返回 true。
例如,如果您为布尔字段设置默认值以避免 nil,您可能会这样做
def set_defaults_before_create
self.my_boolean_field ||= false
end
在此示例方法中, set_defaults_before_create始终返回false并因此回滚您的事务。所以重构它以返回 true
def set_defaults_before_create
self.my_boolean_field ||= false
true
end