Rails 4如何更改验证错误的结构

时间:2014-12-03 13:34:47

标签: ruby-on-rails ruby ruby-on-rails-4

是否有办法更改JSON的常规验证错误的结构,例如

存在和独特性

我在带有presence_validator.rb的模型文件夹中有以下代码

class PresenceValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    unless value.present?
      record.errors[attribute] << (options[:message] || "is not present")
    end
  end
end

但这似乎与消息无关。

我希望错误格式如下:

{
  "errors": [
     { "key": "aaass", "value": "adasasdas" },
     { "key": "aadaass", "value": "adasas132das" }
  ]
}

当前的JSON失败:

{
  "name": [
    "Requires name"
  ]
}

1 个答案:

答案 0 :(得分:1)

首先 - 它不适合这种变化。错误结构应保持原样,您希望更改错误json表示。为此你需要一些猴子补丁:

class ActiveModel::Errors
  def as_json(options={})
    {
      errors: map {|key, value| {key: key, value: value } }
    }
  end
end

将此代码放在config/initializers/errors_extensions.rb中,并且所有代码都应按照规范运行。