在Rails ActiveRecord验证中,通常如果验证失败,它将在模型的errors属性中添加一条错误消息,但是我们的客户要求除错误消息外还返回错误代码,例如,我们有一个Bill模型,该模型具有一个msisdn属性,如果msisdn为null,则错误代码为101,如果msisdn不投诉采用MSISDN格式,则错误代码为102,当客户端通过REST接口提交请求时,如果验证失败,则应该返回一个json对象,例如
bill: {
error_code: 101,
error_message: "msisdn can't be null"
}
除了错误消息,是否有办法告诉activerecord生成错误代码?非常感谢。
errors
只是一个普通的哈希,键代表具有错误的属性,值代表错误消息。因此从技术上讲,您的要求是可行的,方法是将文本消息替换为哈希。但是缺点是您可能需要做更多的事情才能以新格式显示错误。
例如,使用自定义验证器添加错误代码
class Foo < ActiveRecord::Base
attr_accessible :msiisnd
validate :msiisdn_can_not_be_blank
def msiisdn_can_not_be_blank
if msiisdn.blank?
errors.add(:msiisdn, {code: 101, message: "cannot be blank"})
end
end
end
然后用
foo = Foo.new
foo.errors.count
#=> 0
foo.valid?
#=> false
foo.errors.count
#=> 1
foo.errors[:msiisdn]
#=> [{ code: 101, message: "can not be blank"}]
foo.errors[:msiisdn][0][:code]
#=> 101
这样就可以使用它了。但是,当您需要正确显示错误(例如,以表格形式显示错误)时,您需要做更多的工作,因为这不是惯例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句