Подтвердить что ты не робот

Undefined метод экземпляра "reply_to" в Rails 5 API Controller

В рельсах 5, созданных с помощью --api У меня есть ошибка

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

Однако в документации для рельсов 4.2 говорится http://edgeguides.rubyonrails.org/4_2_release_notes.html

response_with и соответствующий ответ класса class_to были перешел в драгоценный камень респондентов. Добавьте gem 'responseers', '~ > 2.0' к вашему Gemfile, чтобы использовать его:

Уровень ответа на уровне экземпляра не изменяется:

И я вызываю метод экземпляра. В чем дело?

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
4b9b3361

Ответ 1

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

Ответ 2

Как и в случае с Rails 4.2, эта функциональность больше не поставляется с Rails, но может быть легко включена в драгоценный камень респондентов (например, Max, отмеченный в комментариях выше).

Добавьте gem 'responders' в свой Gemfile, затем

$ bundle install
$ rails g responders:install

Источники:
http://edgeguides.rubyonrails.org/4_2_release_notes.html#respond-with-class-level-respond-to https://github.com/plataformatec/responders