Переопределение ответа JSON для response_with для ошибок

Я хочу настроить ответ об ошибке respond_with, То, как он отображает ошибки, выглядит так:

# /app/controllers/articles_controller.rb
def create
  article = Article.new(params[:article])
  article.save
  respond_with(article)
end

Response:

{
  errors: {
    title: ["can't be blank", "must be longer than 10 characters"],
    body: ["can't be blank"]
  }
}

Я хотел бы, чтобы это отвечало по-другому. Есть ли способ переопределить этот формат?

Я успешно сделал это, обезьяна исправляя класс ActionController::Responder и переопределив json_resource_errors но это кажется плохим способом сделать это.

2 ответа

Самый простой способ - не использовать respond_with но respond_to ( документы).

respond_to do |format|
  format.json { article.valid? ? article.to_json : article.custom_json_errors }
end

AFAIK, правильный способ - настроить json_resource_errors внутри, например, вашего application_responder.rb

например вот так:

class ApplicationResponder < ActionController::Responder
  include Responders::FlashResponder
  include Responders::HttpCacheResponder

  # Redirects resources to the collection path (index action) instead
  # of the resource path (show action) for POST/PUT/DELETE requests.
  include Responders::CollectionResponder

  def json_resource_errors
    { errors: resource.errors }
  end
end
Другие вопросы по тегам