ruby-on-rails-3 – Rails:如何使用before_save根据另一个字段
发布时间:2020-12-16 22:18:24 所属栏目:百科 来源:网络整理
导读:我正在尝试根据另一个布尔字段的值将布尔字段设置为false.我尝试使用ActiveRecord模型的以下内容: before_save :reconcile_xvent def reconcile_xvent self.xvent_hood = false if !self.xvent_plenum? end 但这不行.现在,我的许多单元测试失败了: ActiveR
我正在尝试根据另一个布尔字段的值将布尔字段设置为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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |