web-dev-qa-db-fra.com

Méthode d'instance non définie "respond_to" in Rails 5 Contrôleur d'API

Dans Rails 5 créé avec --api J'ai une erreur

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

Cependant, dans la documentation de Rails 4.2, il est indiqué http://edgeguides.rubyonrails.org/4_2_release_notes.html

respond_with et le respond_point correspondant au niveau de la classe ont été déplacés vers le joyau du répondeur. Ajoutez un gem 'responders', '~> 2.0' à votre Gemfile pour l'utiliser:

Respond_to au niveau instance n'est pas affecté:

Et j'appelle la méthode de l'instance. Quel est le problème?

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
44
アレックス

ActionController::API n'inclut pas le ActionController::MimeResponds module. Si vous voulez utiliser respond_to vous devez inclure 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

Source: ActionController :: Docs de l'API

84
max

À partir de Rails 4.2, cette fonctionnalité n'est plus livrée avec Rails, mais peut facilement être incluse dans la gemme des répondants (comme Max l'a noté dans les commentaires ci-dessus).

Ajouter gem 'responders' à votre Gemfile, alors

$ bundle install
$ Rails g responders:install

Sources:
http://edgeguides.rubyonrails.org/4_2_release_notes.html#respond-with-class-level-respond-tohttps://github.com/plataformatec/répondeurs

13
jpalmieri