2012-10-11 6 views
9

Ho un controller denominato BaseController che eredita da ApplicationController senza un modello associato ma ha il metodo ping che risponde solo con un messaggio per informare che tutto è OK.Percorso per un controller senza modello nelle guide 3

che sto cercando di chiamare il ping azione attraverso la BaseController l'impostazione di questo nel mio file routes.rb:

namespace :api, defaults: { format: 'json' } do 
    match '/ping' => 'base#ping' 
end 

Ma è sempre darmi una NameError uninitialized constant Base. Suppongo che stia cercando di trovare un modello chiamato Base che non esiste, quindi non so come impostare il percorso corretto per il mio controller.

Il contenuto della mia BaseController è il seguente:

class Api::BaseController < ApplicationController 
    load_and_authorize_resource 
    respond_to :json 

    def ping 
     respond_with({ :status => 'OK' }) 
    end 
end 

informazioni come extra: BaseController è solo un controller genitore per altri controller di ereditare. Gli altri sono controller di risorse e hanno modelli associati

Grazie.

risposta

8

Quando si inserisce uno spazio dei nomi attorno a un percorso, cercherà il controller all'interno di tale spazio dei nomi.

Quindi nel tuo caso, cercherà un controller chiamato Api :: BaseController, che normalmente verrebbe archiviato in app/controller/api/base_controller.rb. È così che viene impostato il controller?

Vedi qui per maggiori dettagli: http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing

EDIT:

non credo che la sua non trovare il controller che è il problema. L'errore è causato dal fatto che chiami load_and_authorize_resource nel controller. CanCan utilizza il nome del controller per tentare di caricare la risorsa.

Se non è disponibile alcun modello per il controller, effettuare la chiamata authorize_resource :class => false.

Vedere bottom of this page per ulteriori dettagli.

+0

Sì, questa è la mia struttura. – John

+0

Puoi aggiungere il contenuto del tuo BaseController alla domanda? – link664

+0

Grazie, per il tuo interesse. Contenuto di BaseController aggiunto. – John

0

Si prega di provare questo:

Aggiungi questo nella vostra routes.rb

resources :base 
+0

Grazie ma cancella il NameError, ma non ho un modello base, solo un controller specifico per un'api. I controller che ereditano da BaseController funzionano bene ma hanno modelli associati. Voglio dire, il percorso del ping non dovrebbe essere una rotta piena di risorse. – John

0

Prova questa nelle vostre routes.rb map.resources: base,: collection => {: ping =>: get}