加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读