如何在给定的命名空间下为所有传入Rails应用程序的请求设置默认的内容类型?
在我的例子中,我有一个/api
命名空间,它总是期望JSON,但我不想强迫客户端总是设置它(如果他们愿意,当然欢迎他们这样做,在这种情况下,Rails应用程序应该遵守设置的Content-Type)。所以它应该默认为application/json
。
这将使curl
等的测试更加容易。
我该怎么做?
一种方法是在API控制器中指定before操作并设置JSON格式:
before_filter :default_request_format
private
def default_request_format
request.format = :json
end
也可以在routes.rb
中指定JSON格式。
让所有API-Controller从API::Controller类继承,该类只响应:json
示例:
class Api::Controller < ActionController::Base
respond_to :json
before_filter :default_request_format
private
def default_request_format
request.format = :json
end
end
现在,您的其他Api控制器可以从中继承,并将自动使用JSON进行响应。
例如,您有一个名为"FooBar"的模型:
class Api::FooBarsController < Api::Controller
def index
@foobars = FooBar.all
respond_with(@foobars)
end
end