web-dev-qa-db-ja.com

Rails 5 API Controllerの未定義インスタンスメソッド "respond_to"

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

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

ソース: ActionController :: API docs

84
max

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

13
jpalmieri