gpt4 book ai didi

ruby-on-rails - 我的 Rails before_validation 回调应该如何处理错误数据?

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

我有几个 before_validation 回调,它们对我的模型上设置的属性进行操作。当我遇到这样的情况时,我遇到了麻烦:

class Foo < ActiveRecord::Base

before_validation :capitalize_title
validates :title, :presence => true

def capitalize_title
title.upcase
end

end

我编写了一个测试来确保不允许使用“nil”标题,但由于未定义 nil.upcase,该测试出现错误。我想处理这个错误,但我已经有了在 before_validation 回调之后运行的错误处理。

如果可以避免的话,我不想检查所有 before_validation 回调以确保数据存在。

有没有一种干净的或公认的方法来处理这种情况?

最佳答案

只需检查您是否有标题。并且不要忘记保存修改后的标题。

def capitalize_title
title = title.upcase if title
end

如果您需要使用 before_validation Hook 进行修补,那么您将不得不在两个地方处理无效数据。如果您的验证很复杂,您可以将其分为两部分:一部分必须在 before_validation 运行之前为真,另一部分必须为 之后 before_validation 已运行:

before_validation :mangle_data
validate :data_is_okay

#...

def mangle_data
return if(!data_is_mangleable)
#... mangle away
end

def date_is_okay
if(!data_is_mangleable)
# complain
end
if(!data_is_properly_mangled)
# complain some more
end
end

def data_is_mangleable
return false if(thing.nil?)
# etc.
end

def data_is_properly_mangled
# check that stuff that the before_validation hook doesn't
# have to care about.
end

关于ruby-on-rails - 我的 Rails before_validation 回调应该如何处理错误数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606244/

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