2016-03-14 15 views
29

In rotaie 5 creati con --api ho un errore dimetodo di istanza non definita "respond_to" in Rails 5 controller API

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

Tuttavia, nella documentazione per le rotaie 4.2 si dice http://edgeguides.rubyonrails.org/4_2_release_notes.html

respond_with e il corrispondente livello di classe respond_to è stato spostato nella gemma responder. Aggiungere gioiello 'responder', '~> 2.0' per il tuo Gemfile per usarlo:

a livello di istanza respond_to è influenzato:

E sto chiamando il metodo di istanza. Che cosa c'é?

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

"Qual è il problema?" - Um, le note di rilascio sono per 4.2 e stai usando 5? –

+0

@ JörgWMittag, non c'è stato alcun accenno al cambio di meme-risponde dal 4.2, quindi è ancora molto rilevante. – max

+0

Si potrebbe desiderare di provare la gemma risponditori però. È dannatamente fantastico. – max

risposta

55

ActionController::API non include il modulo ActionController::MimeResponds. Se si desidera utilizzare respond_to è necessario includere 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 

Fonte: ActionController::API docs

10

Come di Rails 4.2, questa funzionalità non è più fornito con Rails, ma può essere facilmente incluso con il responder gemma (come Max ha notato nei commenti sopra).

Aggiungi gem 'responders' al Gemfile, poi

$ bundle install 
$ rails g responders:install 

Fonti:
http://edgeguides.rubyonrails.org/4_2_release_notes.html#respond-with-class-level-respond-to https://github.com/plataformatec/responders

+2

Citazione dalla sorgente collegata "Il livello di risposta respond_to non è influenzato". Se come OP il tuo unico usando il livello di istanza respond_to non hai bisogno del gemma responder, assicurati che ActionController :: MimeResponds sia stato incluso nel tuo controller. – complistic

Problemi correlati