RoutingError в результате того, что 'redirect_to root_url' не передает действие

При стандартной установке Rails_Admin с использованием Devise для аутентификации и CanCan для авторизации, доступ к http: // localhost: 3000 / admin в качестве пользователя без прав администратора создает следующий сервер log:

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 '

Кажется, все до последней части нормально. Насколько я могу судить, CanCan правильно спасает исключение и пытается перенаправить на root_url с помощью следующего кода:

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

Но по какой-то причине при перенаправлении на root_url CanCan пытается только поразить

{:controller=>"gyms"}

, а не

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

Возможно, это проблема с CanCan? Или есть какой-то конкретный аспект redirect_to или root_url, который я пропустил в документации?

Примечание: это дубликат проблемы, которую я открыл на странице Github CanCan, поэтому я обязательно закрою одну, если другая будет решена .

5
задан Jarno Lamberg 8 December 2015 в 22:56
поделиться