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

Gin*_*ris 8 json rendering ruby-on-rails mime-types

使用ROAR(https://github.com/apotonick/roar)并且不使用ActiveRecord或任何视图模板我想:

  • 使用默认的 JSON重定者,但我自己的 mime类型使用respond_with呈现JSON
  • 使用默认的 JSON解析器,但我自己的 mime类型将POST主体的条目放入params散列.

配置/初始化/ mime_types.rb:

Mime::Type.register "application/vnd.xxx-v1+json" , :xxx_v1
Run Code Online (Sandbox Code Playgroud)

控制器/ 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
Run Code Online (Sandbox Code Playgroud)

控制器/ API/user_controller.rb:

class Api::V1::UsersController < Api::V1::BaseController 

  def index
    respond_with User.all
  end
end
Run Code Online (Sandbox Code Playgroud)

GET http:// domain/users 接受application/vnd.xxx-v1

错误:缺少模板api/v1/users/index,api/v1/base/index with {:handlers => [:erb,:builder],:formats => [:xxx_v1],:locale => [:en, :EN]}

在阅读了几个帖子,如 Rails Custom Rendererrails 3响应格式以及在Accept标头中使用供应商MIME类型进行版本控制后,我仍然无法使其工作.

- ===小更新=== -

当我在控制器中直接使用渲染时,它正在工作!总是带有respond_with的问题......

render :xxx_v1 => User.all
Run Code Online (Sandbox Code Playgroud)

Gin*_*ris 3

渲染解决方案:

将一个空方法放入模型中:

def to_xxx_v1
end
Run Code Online (Sandbox Code Playgroud)

它不会被调用,但必须存在于 respond_with 中。