2013-06-27 2 views
1

Я создаю json api, используя Rails и RABL.Использование RABL для обработки ошибок в Rails json

Есть ли способ показать сообщения об ошибках с помощью 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 

И в моем шаблоне показать RABL:

object @foo 

attributes :id, :name 

node :errors do |o| 
    o.errors 
end 

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

undefined method `errors' for nil:NilClass 

ответ

2

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

render(:json => errors.to_json, :status => 404)