In Rails 5 with --api
created with_ errorがあります
NoMethodError (undefined method `respond_to' for #<Api::MyController:0x005645c81f0798>
Did you mean? respond_to?):
ただし、Rails 4.2のドキュメントでは http://edgeguides.rubyonrails.org/4_2_release_notes.html
respond_withと対応するクラスレベルのrespond_toはレスポンダーgemに移動されました。 gem 'responders'、 '〜> 2.0'をGemfileに追加して使用します:
インスタンスレベルのrespond_toは影響を受けません。
そして、私はインスタンスメソッドを呼び出しています。どうしたの?
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
にはActionController::MimeResponds
モジュールは含まれません。 respond_to
を使用する場合は、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
Rails 4.2の時点で、この機能はRailsに同梱されなくなりましたが、レスポンダーのgemに簡単に含めることができます(上記のコメントで述べたMaxのように)。
追加 gem 'responders'
をGemfileに、そして
$ bundle install
$ Rails g responders:install
ソース:
http://edgeguides.rubyonrails.org/4_2_release_notes.html#respond-with-class-level-respond-tohttps://github.com/plataformatec/responders