jsonとxmlを提供するためにレールアプリケーションをグローバルに定義する方法はありますか?JSONとXMLリクエストにのみ応答するようにレールを制限する
私はそれがbefore_filterとresponds_toの行に沿ってApplicationControllerにあると思っていますが、それは私の調査が私に与えている限りです。
jsonとxmlを提供するためにレールアプリケーションをグローバルに定義する方法はありますか?JSONとXMLリクエストにのみ応答するようにレールを制限する
私はそれがbefore_filterとresponds_toの行に沿ってApplicationControllerにあると思っていますが、それは私の調査が私に与えている限りです。
だけrespond_to
を使用して、あなたのコントローラ上のクラスレベルでそれを宣言する。あなたはまた、より多くのオプション約ActionController::Responder
クラスを読んApplicationController
class ApplicationController < ActionController::Base
respond_to :xml, :json
…
end
でそれを行う場合は、すべてのコントローラに適用されます。
ちょうどあなた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
この問題を抱えている人にとっては、 '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
私はそれを考えましたが、他のリクエストがあった場合、エラーをレンダリングするために別の作業を行う必要がありますか?私はラックがこれにとってより良い場所になるかどうかも疑問に思いました。 – Nick
ストライクは - 素晴らしい作品:)ラックがより良くなるかどうか疑問に思う。掘る時間。 – Nick
これは私のためにゼロ差を作った。それはコントローラの動作の中で私がしなければならなかったものに対して何が反応するかを重要にしていました。 –