Rails 3和JSON:默认渲染器,但自定义mime类型



使用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提供

最新更新