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
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
À 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