Как настроить вывод json ошибки валидации Rails 3? - PullRequest
5 голосов
/ 23 августа 2011

По умолчанию вызывается rails.model.to_json

Покажет что-то вроде этого:

{"name":["can't be blank"],"email":["can't be blank"],"phone":["can't be blank"]}

Вместо сообщения мне нужно сгенерировать код состояния, который можно использовать на клиенте службы:

[{"field": "name", "code": "blank"}, {"field": "email", "code": "blank"}]

Этот подход очень похож на ошибки в github api v3 - http://developer.github.com/v3/

Как мне добиться этого с помощью Rails?

Ответы [ 2 ]

0 голосов
/ 23 августа 2011

В вашей модели вы можете изменить способ работы json.Например, предположим, у вас есть модель ActiveRecord Contact.Вы можете переопределить as_json, чтобы изменить поведение рендеринга.

def Contact < ActiveRecord::Base

  def as_json
    hash = super

    hash.collect {|key, value|
      {"field" => key, "code" => determine_code_from(value)} 
    }
  end

end

Конечно, вы также можете сгенерировать json отдельным методом на Contact или даже в контроллере.Вам просто нужно немного изменить метод рендеринга.

render @contact.as_my_custom_json
0 голосов
/ 23 августа 2011

В вашем контроллере, когда вы отображаете вывод, в вашем случае содержимое JSON, добавьте следующее:

render :json => @yourobject, :status => 422 # or whatever status you want.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...