gpt4 book ai didi

ruby-on-rails - Rails model.valid?冲洗自定义错误并错误地返回true

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

我正在尝试向用户模型的实例添加自定义错误,但是何时调用有效?它正在清除自定义错误并返回true。

[99] pry(main)> u.email = "test@test.com"
"test@test.com"

[100] pry(main)> u.status = 1
1

[101] pry(main)> u.valid?
true

[102] pry(main)> u.errors.add(:status, "must be YES or NO")
[
[0] "must be YES or NO"
]

[103] pry(main)> u.errors
#<ActiveModel::Errors:[...]@messages={:status=>["must be YES or NO"]}>

[104] pry(main)> u.valid?
true

[105] pry(main)> u.errors
#<ActiveModel::Errors:[...]@messages={}>

如果我在模型中使用 validate方法,那么它可以工作,但是此特定的验证是从其他方法中添加的(需要传递参数):
User

def do_something_with(arg1, arg2)
errors.add(:field, "etc") if arg1 != arg2
end

由于上述原因,user.valid?即使将该错误添加到实例,也会返回true。

最佳答案

在ActiveModel中,valid?定义如下:

def valid?(context = nil)
current_context, self.validation_context = validation_context, context
errors.clear
run_validations!
ensure
self.validation_context = current_context
end

因此,可以清除现有错误。您必须将所有自定义验证放入一些 validate回调中。像这样:
validate :check_status

def check_status
errors.add(:status, "must be YES or NO") unless ['YES', 'NO'].include?(status)
end

关于ruby-on-rails - Rails model.valid?冲洗自定义错误并错误地返回true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13879700/

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