使用ROAR (https://github.com/apotonick/roar),而不使用ActiveRecord或任何视图模板,我想:
- 使用默认的 JSON读取器,但我的自己的 mime类型来渲染JSON与respond_with
- 使用默认的 JSON解析器,但是我的自己的 mime类型将POST-body的条目放入params哈希。
配置/初始化/mime_types.rb:
Mime::Type.register "application/vnd.xxx-v1+json" , :xxx_v1
控制器/api/base_controller.rb
class Api::V1::BaseController < ActionController::Base
respond_to :xxx_v1
ActionController.add_renderer :xxx_v1 do |obj, options|
json = obj.to_json
self.content_type ||= Mime::Type.lookup('application/vnd.xxx-v1+json')
self.response_body = json
end
end
控制器/api/user_controller.rb:
class Api::V1::UsersController < Api::V1::BaseController
def index
respond_with User.all
end
end
http://domain/users接受应用程序/vnd.xxx-v1
错误:缺少模板api/v1/users/index, api/v1/base/index与{:handlers=>[:erb,:builder],:formats=>[:xxx_v1],:locale=>[:en,:en]}
看了几个帖子后,像Rails自定义渲染器或Rails 3响应格式和版本控制使用供应商的MIME类型在接受头我仍然不能得到它的工作…
-===小更新===-
当我在控制器中直接使用渲染时,它正在工作!respond_with…总是有问题
render :xxx_v1 => User.all
使用自定义mime类型自动解析http正文:配置/初始化/mime_types。rb :
ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime::Type.lookup('application/vnd.xxx_v1+json')]=lambda do |body|
JSON.parse(body)
end
显示方案:
把一个空方法放到你的模型中:
def to_xxx_v1
end
它没有被调用,但必须为respond_with提供