2016-03-14 11 views
29

w szynach 5 utworzonych z --api mam błądNiezdefiniowany metoda instancji "respond_to" w szynach 5 API kontrolera

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

Jednak w dokumentacji szynach 4.2 mówi http://edgeguides.rubyonrails.org/4_2_release_notes.html

respond_with i odpowiadający poziom odpowiedzi na poziomie klasy został przeniesiony do klejnotu respondentów. Dodaj gem 'reagujących', '~> 2.0' do Gemfile go używać:

Instance poziomie respond_to jest nienaruszona:

A ja wywołanie metody instancji. O co chodzi?

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 
+3

"Co się stało?" - Um, informacje o wydaniu są dla 4.2 i używasz 5? –

+0

@ JörgWMittag, nie było żadnej wzmianki o zmianie meme-odpowiedzi od 4.2, więc nadal jest bardzo istotne. – max

+0

Możesz jednak spróbować klejnotów odpowiadających. To cholernie niesamowite. – max

Odpowiedz

55

ActionController::API nie obejmuje moduł ActionController::MimeResponds. Jeśli chcesz użyć respond_to, musisz dołączyć 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 

Źródło: ActionController::API docs

10

Jak Rails 4.2, ta funkcja nie jest już dostarczany z Rails, ale mogą być łatwo dołączone gem odpowiadających (jak Max zauważył w komentarzach powyżej).

Dodaj gem 'responders' do Gemfile, następnie

$ bundle install 
$ rails g responders:install 

Źródła:
http://edgeguides.rubyonrails.org/4_2_release_notes.html#respond-with-class-level-respond-to https://github.com/plataformatec/responders

+2

Cytat z połączonego źródła "Nie ma wpływu na poziom odpowiedzi na poziomie instancji". Jeśli lubisz OP tylko przy użyciu poziomu instancji, nie potrzebujesz klejnotów odpowiadających, po prostu upewnij się, że ActionController :: MimeResponds został włączony do twojego kontrolera. – complistic