ruby-on-rails-3 – Rails:如何使用before_save根据另一个字段更改字段值?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – Rails:如何使用before_save根据另一个字段更改字段值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试根据另一个布尔字段的值将布尔字段设置为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

原文链接:/ruby/266177.html

猜你在找的Ruby相关文章