En rails 5 creado con --api tengo un error

NoMethodError (undefined method `respond_to' for #<Api::MyController:0x005645c81f0798>
Did you mean?  respond_to?):

Sin embargo, en la documentación para rails 4.2 dice http://edgeguides.rubyonrails.org/4_2_release_notes.html

respond_with y el correspondiente nivel de clase respond_to han sido
se trasladó a los socorristas de la gema. Añadir la gema ‘socorristas’, ‘~> 2.0 a su
Gemfile para usarlo:

A nivel de instancia respond_to no se ve afectada:

Y estoy llamando el método de instancia. ¿Cuál es el problema?

class ApplicationController < ActionController::API
end

# ...
class Api::MyController < ApplicationController

  def method1
    # ...
    respond_to do |format|
      format.xml { render(xml: "fdsfds") }
      format.json { render(json: "fdsfdsfd" ) }
    end
  • «¿Qué es la materia?» – Um, las notas son para 4.2 y está utilizando 5?
  • no ha habido ninguna mención de cambiar meme-responde desde el 4.2 por lo que es muy relevante.
  • Es posible que desee probar los socorristas de la gema, aunque. Su bastante maldito impresionante.
  • hay alguna joya que no es impresionante? Se quita el aliento y te hace gritar «waayyyyy, es bastante impresionante, yyyaaahhhhh!!!» o qué?
  • Hay un montón de gemas que son sólo meh. Los socorristas realmente le permite saltar un montón de repetitivo y SECAR sus controladores. Recomiendo especialmente para la API.
  • en lugar de escribir 2 líneas de código que debo usar una gema?

InformationsquelleAutor | 2016-03-14

2 Comentarios

  1. 87

    ActionController::API no incluye el ActionController::MimeResponds módulo. Si desea utilizar respond_to deberá incluir MimeResponds.

    class ApplicationController < ActionController::API
      include ActionController::MimeResponds
    end
    
    
    class Api::MyController < ApplicationController
      def method1
        # ...
        respond_to do |format|
          format.xml { render(xml: "fdsfds") }
          format.json { render(json: "fdsfdsfd" ) }
        end
      end
    end

    Fuente: ActionController::API docs

    • Gracias compañero, se hizo el trabajo.
  2. 13

    Como de Rails 4.2, esta funcionalidad ya no se distribuye con Rails, pero pueden ser fácilmente incluidos con el personal de emergencias de la gema (como Max señalado en comentarios anteriores).

    Agregar gem 'responders' a tu Gemfile, entonces

    $ bundle install
    $ rails g responders:install

    Fuentes:

    http://edgeguides.rubyonrails.org/4_2_release_notes.html#respond-with-class-level-respond-to
    https://github.com/plataformatec/responders

    • Cita de origen vinculado «a nivel de Instancia respond_to no se ve afectada». Si como su OP sólo mediante la instancia de nivel respond_to usted no necesita el personal de emergencias de la gema, sólo asegúrese de ActionController::MimeResponds ha sido incluido en el controlador.

Dejar respuesta

Please enter your comment!
Please enter your name here