5

認証にDevise、承認にCanCanを使用するRails_Adminの標準インストールでは、非管理者ユーザーとしてhttp:// localhost:3000 / adminにアクセスすると、次のサーバーログが生成されます。

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>'

最後の部分まではすべて問題ないようです。私の知る限り、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の特定の側面はありますか?

注:これは、CanCanのgithubページで開いた問題の複製であるため、もう一方が解決した場合は必ず一方を閉じます。

4

1 に答える 1

6

Githubのユーザーからのフィードバックに基づくと、ルートはname_scopedであるように見えるため、これは予想される動作です。

適切な修正は、次のようにmain_appからroot_urlを呼び出すことです。

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

ソリューションのクレジットは、 https: //github.com/sferik/rails_admin/issues/658のbbenezechに送られます。

于 2011-09-12T15:35:43.390 に答える