Использование RABL для обработки ошибок в Rails json

Я создаю json API, используя Rails и RABL.

Есть ли способ показать пользовательские сообщения об ошибках с помощью RABL?

Идея, например, состоит в том, чтобы показать сообщение об ошибке в виде json, когда не удается найти объект вместо стандартного шаблона, например, это показывает сообщение:

{"errors":"Foo that you were looking for could not be found."}

Например, я пытаюсь показать пользовательское сообщение об ошибке в API, используя следующий код:

class Api::V1::FooController < ApplicationController
respond_to :json
before_filter :find_foo, :only =>[:show]

    def find_foo
         @foo = Foo.find(params[:id])
         rescue ActiveRecord::RecordNotFound
            @errors = { :errors => "Foo that you were looking for could not be found."}
            respond_with(errors.to_json, :status => 404)
    end

    def show
        respond_with(@foo)
    end
end

И в моем шаблоне Show RABL:

object @foo

attributes :id, :name

node :errors do |o|
    o.errors
end

Делая это, я получаю сообщение об ошибке для шаблона RABL вместо правильного json:

undefined method `errors' for nil:NilClass

person Fernando    schedule 27.06.2013    source источник


Ответы (1)


Для вашего состояния ошибки вы должны использовать render вместо respond_with.

render(:json => errors.to_json, :status => 404)
person Jeremy Green    schedule 26.09.2013