将rails限制为仅响应JSON和XML请求

时间:2012-01-16 19:46:06

标签: ruby-on-rails web-services api

有没有办法全局定义rails应用程序只提供json和xml以及其他任何请求的错误?

我认为它与ApplicationController中的before_filter和responds_to块一样,但就我的调查所得到的那样。

2 个答案:

答案 0 :(得分:10)

只需使用respond_to在控制器的类级别声明它。如果您在ApplicationController

上执行此操作,它将适用于您的所有控制器
class ApplicationController < ActionController::Base
  respond_to :xml, :json
  …
end

另请阅读ActionController::Responder课程以了解更多选项。

答案 1 :(得分:3)

要对错误进行json响应,只需将以下代码添加到application_controller:

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