Переопределение ответа 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