gpt4 book ai didi

ruby-on-rails-3 - Rails:如何使用before_save更改基于另一个字段的字段值?

转载 作者:行者123 更新时间:2023-12-03 21:09:02 26 4
gpt4 key购买 nike

我试图根据另一个 bool(boolean) 字段的值将 bool(boolean) 字段设置为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

如果没有“if self.xvent_hood?”,我无法弄清楚它是否可以正常工作。部分....

最佳答案

验证通过后,before_save仅称为。您需要做的是将reconcile_xvent上移为before_validation,而不是before_save
如果将该方法保留在before_save中,将发生的事情是它认为xvent_hood为null,如果您有一个检查xvent_hood无效的验证,它将在调用before_save之前失败。这可能解释了为什么出现RecordNotSaved错误。

要记住的另一件事是,如果您具有 bool(boolean) 属性,则也不能使用validate_presence_of。参见http://alexanderwong.me/post/16084280769/rails-validate-presence-of-boolean-and-arrays-mongoid

关于ruby-on-rails-3 - Rails:如何使用before_save更改基于另一个字段的字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11782969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com