2012-01-16 77 views
6

有没有一种方法可以全局定义一个rails应用程序来只提供json和xml,并在其他任何请求上适当地出错?限制只响应JSON和XML请求的导轨

我在想这是沿着ApplicationController中的before_filter和responds_to块的东西,但就我的调查所得到的那样。

回答

10

在控制器上的一流水平只是声明它,使用respond_to。如果你这样做对ApplicationController

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

也了解ActionController::Responder类更多的选择将适用于所有的控制器。

+0

我认为,但如果发出其他请求,我还需要做额外的工作来呈现错误吗?我也想知道架子是否会是更好的选择。 – Nick 2012-01-17 13:40:47

+0

罢工 - 工程很好:)还是不知道机架会更好。有时间挖掘。 – Nick 2012-01-17 14:08:33

+1

这对我来说没有什么不同。它只是重要的东西,我必须在我的控制器的行动。 – 2012-06-17 23:35:17

1

要做出错误的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 
+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 2013-01-06 09:08:33