我有几个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回调进行检查,以确保数据存在,如果可以避免的话。
是否有一种干净或可接受的方式来处理这种情况?
答案 0 :(得分:6)
检查你是否有头衔。并且不要忘记保存修改后的标题。
def capitalize_title
title = title.upcase if title
end
如果您需要使用before_validation
挂钩进行修补,那么您将无法在两个位置处理无效数据。如果你的验证很复杂,你可以把它分成两部分:一部分在before_validation
可以运行之前必须是真的,一部分必须是真的之后 {{1}已经运行:
before_validation