Rails:如何处理替代接受:内容类型为JSON?

时间:2012-02-22 01:48:39

标签: ruby-on-rails content-type

到目前为止,我已经找到了两种方法让request.format.json?在Rails中成为现实(即传入请求被视为JSON)。一种是如果您请求资源并以.json结尾,则另一种情况是您在请求中提供标头Accept: application/json。每项工作都是独立的。

我想为第二种情况注册我自己的“接受”类型:

Accept: application/vnd.myapp_v1+json 并将其视为“json请求”,例如application/json,并且无需附加.json

我的第一个想法是将我自己的MimeType注册为:json(在我的初始化代码中),但这实际上会破坏对application / json的支持,而不是我想要做的。

    Mime::Type.register "application/vnd.myapp_v1+json", :json  # my failed attempt

1 个答案:

答案 0 :(得分:8)

我们在我们的应用中将iPhone请求转移到HTML,并使用如下的before_filter:

before_filter :determine_format

def determine_format
    request.format = :iphone if (request.env["HTTP_USER_AGENT"] =~ /iPhone/ && request.format == :html)
end

我想你可以用你的特定格式做类似的事情,也许是这样的:

def determine_format
    request.format = :json if (request.format == 'application/vnd.myapp_v1+json')
end