2011-08-10 12 views
5

Con una instalación estándar de Rails_Admin usando Diseñar para la autenticación y CanCan de autorización, el acceso a http://localhost:3000/admin como un usuario que no es administrador produce el siguiente registro del servidor:RoutingError resultante de 'redirect_to root_url' que no pasa a la acción

Started GET "/admin" for 127.0.0.1 at 2011-08-09 22:46:10 -0400 
    Processing by RailsAdmin::MainController#index as HTML 
    User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 
Completed 404 Not Found in 151ms 

ActionController::RoutingError (No route matches {:controller=>"gyms"}): 
    app/controllers/application_controller.rb:5:in `block in <class:ApplicationController>' 

Todo hasta la última parte parece estar bien. Por lo que yo puedo decir, CanCan rescata la excepción correctamente e intenta redirigir a root_url a través del siguiente código:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    rescue_from CanCan::AccessDenied do |exception| 
    redirect_to root_url, :alert => exception.message 
    end 
end 

TopOut::Application.routes.draw do 
    mount RailsAdmin::Engine => '/admin', :as => 'rails_admin' 
    devise_for :users 

    resources :gyms 

    root :to => "gyms#index" 
end 

Pero por alguna razón, en la reorientación de root_url, CanCan solamente está tratando de golpear

{:controller=>"gyms"} 

en lugar de

{:controller=>"gyms", :action=>"index"} 

Es éste posiblemente un problema con CanCan? ¿O hay alguna faceta particular de redirect_to o root_url que perdí en los documentos?

Nota: este es un duplicado de un problema que abrí en la página github de CanCan, así que me aseguraré de cerrar uno si el otro está resuelto.

Respuesta

6

Según los comentarios de los usuarios de Github, parece que las rutas están siendo identificadas por nombre, por lo que este es el comportamiento esperado.

solución adecuada es llamar root_url de main_app de la siguiente manera:

rescue_from CanCan::AccessDenied do |exception| 
    redirect_to main_app.root_url, :alert => exception.message 
end 

de crédito para la solución va a bbenezech en https://github.com/sferik/rails_admin/issues/658