我试图根据另一个布尔字段的值将一个布尔字段设置为 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?
Update
以下是有效的方法(其中一些来自下面的评论/答案):
before_validation :reconcile_xvent
def reconcile_xvent
if self.xvent_hood?
self.xvent_hood = false unless xvent_plenum?
end
end
如果没有“if self.xvent_hood?”,我无法弄清楚如何让它工作。部分....
before_save
is only验证通过后调用。你需要做的就是移动reconcile_xvent
up to before_validation
而不是before_save
如果你将该方法保留在before_save
将会发生的是它认为xvent_hood
为空,如果您有一个验证来检查以下内容的无效性xvent_hood
它将在之前失败before_save
被叫。这可能解释了为什么你得到RecordNotSaved
error.
另一件要记住的事情是,如果你有一个布尔属性,你也不能使用validate_presence_of
. See http://alexanderwong.me/post/16084280769/rails-validate-presence-of-boolean-and-arrays-mongoid http://alexanderwong.me/post/16084280769/rails-validate-presence-of-boolean-and-arrays-mongoid
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)