Rails RABL response_with шаблона ошибки
Используя RABL в Rails 3.2.x, учитывая следующее действие контроллера:
respond_to :html, :json
def create
@foo = Foo.create(params[:foo])
respond_with @foo
end
Предполагая, что проверка не удалась, как вы получаете response_with использовать шаблон RABL вместо стандартного хеша ошибок JSON - IE. Я хотел бы получить другие атрибуты модели, кроме сообщения об ошибке проверки, отправленного обратно вместе с запросом.
Предложения?
2 ответа
Я нашел это трудным путем. Вы должны создать собственный ответчик для вашего контроллера приложения или, по крайней мере, ваш индивидуальный ответ. Посмотрите Три причины любить ActionController::Responder для получения дополнительной информации.
Мое решение:
# app/responders/api_responder.rb
class ApiResponder < ActionController::Responder
def to_format
case
when has_errors?
controller.response.status = :unprocessable_entity
when post?
controller.response.status = :created
end
default_render
rescue ActionView::MissingTemplate => e
api_behavior(e)
end
end
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
#...
self.responder = ApiResponder
#...
end
Вы также можете использовать respond_with @foo, responder: ApiResponder
вместо.
Спасибо Хэксни за то, что отправил меня в правильном направлении.
Я полагаю, вам нужно удалить вызов response_to в верхней части контроллера и удалить вызов response_with внутри действия, чтобы заставить rabl визуализировать ваш шаблон rabl.
Просто добавьте блок response_to в конце каждого действия, где вам не нужен RABL.