2012-01-16 8 views

答えて

10

だけrespond_toを使用して、あなたのコントローラ上のクラスレベルでそれを宣言する。あなたはまた、より多くのオプション約ActionController::Responderクラスを読んApplicationController

class ApplicationController < ActionController::Base 
    respond_to :xml, :json 
    … 
end 

でそれを行う場合は、すべてのコントローラに適用されます。

+0

私はそれを考えましたが、他のリクエストがあった場合、エラーをレンダリングするために別の作業を行う必要がありますか?私はラックがこれにとってより良い場所になるかどうかも疑問に思いました。 – Nick

+0

ストライクは - 素晴らしい作品:)ラックがより良くなるかどうか疑問に思う。掘る時間。 – Nick

+1

これは私のためにゼロ差を作った。それはコントローラの動作の中で私がしなければならなかったものに対して何が反応するかを重要にしていました。 –

1

ちょうどあなたapplication_controllerに次のコードを追加し、エラー時にJSONレスポンスを作るために:

rescue_from Exception, :with => :render_error 
rescue_from ActiveRecord::RecordNotFound, :with => :render_not_found 
rescue_from ActionController::RoutingError, :with => :render_not_found 
rescue_from ActionController::UnknownController, :with => :render_not_found 
rescue_from ActionController::UnknownAction, :with => :render_not_found 

private 

def render_not_found(exception) 
    # logger.info(exception) # for logging 
    respond_to do |format| 
    render json: {:error => "404"}, status: 404 
    end  
end 

def render_error(exception) 
    # logger.info(exception) # for logging 
    respond_to do |format| 
    render json: {:error => "500"}, status: 500 
    end 
end 

public 

def some_public_func 
#do sthg 
end 
+0

この問題を抱えている人にとっては、 'rescue_from ActionController :: RoutingError'はRails> = 3.0では動作しません。 https://github.com/rails/rails/issues/671と[このブログ記事のパート3](http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-詳細は、features-in-rails-3-2 /)を参照してください。 – kibibyte

関連する問題