我正在尝试根据另一个布尔字段的值将布尔字段设置为false.我尝试使用ActiveRecord模型的以下内容:
before_save :reconcile_xvent def reconcile_xvent self.xvent_hood = false if !self.xvent_plenum? end
但这不行.现在,我的许多单元测试失败了:
ActiveRecord::RecordNotSaved: ActiveRecord::RecordNotSaved
如果xvent_plenum为false,我如何将xvent_hood设置为false?
更新
这是有用的(其中一些来自下面的评论/答案):
before_validation :reconcile_xvent def reconcile_xvent if self.xvent_hood? self.xvent_hood = false unless xvent_plenum? end end
如果没有“如果self.xvent_hood?”,我无法确定它的工作.部分….
解决方法
before_save只有经过验证才被调用.您需要做的是将reconcile_xvent移至before_validation而不是before_save
如果在before_save中保留该方法,会发生什么,认为xvent_hood为空,如果您有一个验证来检查xvent_hood的空值,那么在before_save被调用之前它将失败.这可能解释了为什么你有RecordNotSaved错误.
要记住的另一件事是,如果你有一个布尔属性,你也不能使用validate_presence_of.见http://alexanderwong.me/post/16084280769/rails-validate-presence-of-boolean-and-arrays-mongoid