我有一个模型,对一个字段有两个验证
class MyClass < ActiveRecord::Base
validates :address,
uniqueness: {
message: localized_message('uniqueness_key')
},
:format => {
:with => /\A([a-zA-Z]\d{4}|)\z/,
message: localized_message('format_key')
}
验证邮件已本地化,因此我不知道它们将包含哪些确切文本。在控制器逻辑中,我需要挽救验证异常,并为格式验证提供一些特定的逻辑。
如何准确检测“格式”验证异常?
答案 0 :(得分:1)
我找到的唯一方法是以下一种方式生成我自己的例外
创建自定义例外
class CustomException < Exception
end
通过添加严格属性,让Rails生成此异常而不是ActiveRecordException
class MyClass < ActiveRecord::Base
validates :address,
uniqueness: {
message: localized_message('uniqueness_key')
},
:format => {
:with => /\A([a-zA-Z]\d{4}|)\z/,
message: localized_message('format_key'),
strict: CustomException
}
在我需要处理异常的地方
rescue Exception => e
if e.is_a?(CustomException)
#Do my stuff here
end
end
答案 1 :(得分:0)
获得所需内容的一种方法是new
您的对象,使用详细信息启动它,然后检查对象errors
。
例如,在您的情况下:
obj = MyClass.new(address: "incorrect_address")
obj.valid?
=> false
obj.errors.messages
=> {:address=>["format_key", "is invalid"]}