我正在构建一个自定义验证器,它会使用外部API来验证银行账号(bank account number)和排序码(sort code)是否存在(即是否是合法的英国银行账户)。由于这是一项昂贵的操作,我不想在账号和排序码未通过Rails内置验证时打扰API。
例如,我有以下基本验证:
validates_presence_of :sort_code, :account_number
validates_format_of :sort_code, :with => Regexes::SORT_CODE
validates_format_of :account_number, :with => Regexes::ACCOUNT_NUMBER
然后我有我的自定义验证:
validate :check_valid_bank_account
def check_valid_bank_account
# code here is irrelevant, but essentially this hits the API
# if it's a valid UK bank account all is OK, if not we add an error
end
我想确保的是如果模型的其余部分有效时才执行自定义验证。 如果没有提供帐户号码,我可以自己解决,没必要花25p让程序告诉我!
我知道我可以编写一些逻辑来手动检查这两个属性是否不为空并将它们与正则表达式匹配...但那似乎不是Rails的风格。