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.

Другие вопросы по тегам