2012-10-11 24 views
9

Tengo un controlador llamado BaseController que hereda de ApplicationController sin un modelo asociado pero tiene el método ping que simplemente responde con un mensaje para informar que todo está bien.Ruta para un controlador sin modelo en rieles 3

estoy tratando de llamar a la acción a través de la mesa de ping BaseController establecer esto en mi archivo routes.rb:

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

Pero siempre me dan una NameError uninitialized constant Base. Supongo que está intentando encontrar un modelo llamado Base que no existe, así que no sé cómo configurar la ruta correcta para mi controlador.

El contenido de mi BaseController es la siguiente:

class Api::BaseController < ApplicationController 
    load_and_authorize_resource 
    respond_to :json 

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

información Como extra: BaseController es sólo un controlador principal para que otros controladores heredan. Los otros son ingeniosos controladores y tienen modelos asociados

Gracias.

Respuesta

8

Cuando coloca un espacio de nombres alrededor de una ruta, buscará el controlador dentro de ese espacio de nombres.

En su caso, se buscará un controlador llamado Api :: BaseController, que normalmente se almacenaría en la aplicación/controladores/api/base_controller.rb. ¿Es así como está configurado su controlador?

ver aquí para más detalles: http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing

EDIT:

no creo que no es encontrar el controlador que es el problema. El error se produce porque está llamando al load_and_authorize_resource en el controlador. CanCan usa el nombre del controlador para intentar cargar el recurso.

Si no hay un modelo para el controlador, realice la llamada authorize_resource :class => false.

Consulte el bottom of this page para obtener más detalles.

+0

Sí, esa es mi estructura. – John

+0

¿Puedes agregar el contenido de tu 'BaseController' a la pregunta? – link664

+0

Gracias, por su interés. Contenido de BaseController agregado. – John

0

Por favor, intente esto:

Añadir esto en su routes.rb

resources :base 
+0

Gracias pero todavía el NameError, pero no tengo un modelo base, solo un controlador específico para una API. Los controladores que heredan de BaseController funcionan bien pero tienen modelos asociados. Quiero decir, la ruta ping no tendría que ser una ruta ingeniosa. – John

0

Pruebe esto en sus routes.rb map.resources: base,: Colección => {: mesa de ping =>: obtener}

Cuestiones relacionadas