2012-01-02 14 views
8

Usando ROAR (https://github.com/apotonick/roar) y sin utilizar ActiveRecord o cualquier vista de las plantillas que quiero:carriles 3 y JSON: procesador predeterminado pero el tipo MIME personalizado

  • utilice el predeterminado JSON Rederer pero mi propia tipo MIME para rendir JSON con respond_with
  • utilice el valor predeterminado analizador JSON pero mi propio tipo MIME poner entradas de la POST-cuerpo en el hash params.

config/inicializadores/mime_types.rb:

Mime::Type.register "application/vnd.xxx-v1+json" , :xxx_v1 

controladores/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 

controladores/api/user_controller.rb:

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

    def index 
    respond_with User.all 
    end 
end 

OBTENER http://domain/users Aceptar application/vnd.xxx-v1

ERROR: Falta la plantilla api/v1/users/index, api/v1/base/index con {: handlers => [: erb,: builder],: formats => [: xxx_v1],: locale => [: en,: es]}

Después de leer varios mensajes como Rails Custom Renderer o rails 3 response format and versioning using vendor MIME type in the Accept header todavía no puedo conseguir que funcione ..

- === == pequeña actualización = -

Cuando uso renderizar directamente en el controlador, ¡está funcionando! Siempre problemas con respond_with ...

render :xxx_v1 => User.all 

Respuesta

3

Solución para la representación:

Ponga un método vacío en sus modelos:

def to_xxx_v1 
end 

No se llama pero tiene que estar presente para responder_con.

4

para el análisis automático de los cuerpos HTTP con tipos MIME personalizados hacen: config/inicializadores/mime_types.rb:

ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime::Type.lookup('application/vnd.xxx_v1+json')]=lambda do |body| 
    JSON.parse(body) 
end 
+0

Esto responde a una pregunta diferente, aunque interesante, que la planteada anteriormente, es decir, responde "cómo analizar" mientras que la pregunta anterior pregunta "cómo renderizar". –

+0

Pero mi pregunta también incluye "usar el analizador JSON predeterminado pero mi propio tipo mime"; D – Ginkgochris

Cuestiones relacionadas