Rails_Admin显示路由错误“无路由匹配{:controller =>”home“}”

时间:2013-02-13 07:05:20

标签: ruby-on-rails ruby rails-admin

我按照说明安装了Rails_Admin,也使用了Devise。当我尝试导航到“/ admin”时,我收到以下错误:

Routing Error

No route matches {:controller=>"home"}

这是我的routes.rb:

Ot::Application.routes.draw do

  resources :badgeships
  resources :badges
  resources :profiles
  resources :universities
  resources :degrees
  resources :jobs
  resources :resources
  resources :communities
  resources :networks

  resources :topics do
        resources :posts
  end

  get 'topics/tag/:tag', to: 'topics#index', as: :topic_tag

  get 'resources/tag/:tag', to: 'resources#index', as: :resource_tag

  root :to => 'home#index'

  devise_for :users, path_names: {sign_in: "login", sign_out: "logout"}

  mount RailsAdmin::Engine => '/admin', :as => 'rails_admin'

end

这是我的rails_admin.rb初始化程序:

RailsAdmin.config do |config|
  config.main_app_name = ["Cool app", "BackOffice"]
  # or somethig more dynamic
  config.main_app_name = Proc.new { |controller| [ "Cool app", "BackOffice - #{controller.params[:action].try(:titleize)}" ] }
end

如何让rails_admin正常工作?

更新:这是我的佣金路线:

[RailsAdmin] RailsAdmin initialization disabled by default. Pass SKIP_RAILS_ADMIN_INITIALIZER=false if you need it.
              badgeships GET    /badgeships(.:format)                      badgeships#index
                         POST   /badgeships(.:format)                      badgeships#create
           new_badgeship GET    /badgeships/new(.:format)                  badgeships#new
          edit_badgeship GET    /badgeships/:id/edit(.:format)             badgeships#edit
               badgeship GET    /badgeships/:id(.:format)                  badgeships#show
                         PUT    /badgeships/:id(.:format)                  badgeships#update
                         DELETE /badgeships/:id(.:format)                  badgeships#destroy
                  badges GET    /badges(.:format)                          badges#index
                         POST   /badges(.:format)                          badges#create
               new_badge GET    /badges/new(.:format)                      badges#new
              edit_badge GET    /badges/:id/edit(.:format)                 badges#edit
                   badge GET    /badges/:id(.:format)                      badges#show
                         PUT    /badges/:id(.:format)                      badges#update
                         DELETE /badges/:id(.:format)                      badges#destroy
                profiles GET    /profiles(.:format)                        profiles#index
                         POST   /profiles(.:format)                        profiles#create
             new_profile GET    /profiles/new(.:format)                    profiles#new
            edit_profile GET    /profiles/:id/edit(.:format)               profiles#edit
                 profile GET    /profiles/:id(.:format)                    profiles#show
                         PUT    /profiles/:id(.:format)                    profiles#update
                         DELETE /profiles/:id(.:format)                    profiles#destroy
            universities GET    /universities(.:format)                    universities#index
                         POST   /universities(.:format)                    universities#create
          new_university GET    /universities/new(.:format)                universities#new
         edit_university GET    /universities/:id/edit(.:format)           universities#edit
              university GET    /universities/:id(.:format)                universities#show
                         PUT    /universities/:id(.:format)                universities#update
                         DELETE /universities/:id(.:format)                universities#destroy
                 degrees GET    /degrees(.:format)                         degrees#index
                         POST   /degrees(.:format)                         degrees#create
              new_degree GET    /degrees/new(.:format)                     degrees#new
             edit_degree GET    /degrees/:id/edit(.:format)                degrees#edit
                  degree GET    /degrees/:id(.:format)                     degrees#show
                         PUT    /degrees/:id(.:format)                     degrees#update
                         DELETE /degrees/:id(.:format)                     degrees#destroy
                    jobs GET    /jobs(.:format)                            jobs#index
                         POST   /jobs(.:format)                            jobs#create
                 new_job GET    /jobs/new(.:format)                        jobs#new
                edit_job GET    /jobs/:id/edit(.:format)                   jobs#edit
                     job GET    /jobs/:id(.:format)                        jobs#show
                         PUT    /jobs/:id(.:format)                        jobs#update
                         DELETE /jobs/:id(.:format)                        jobs#destroy
               resources GET    /resources(.:format)                       resources#index
                         POST   /resources(.:format)                       resources#create
            new_resource GET    /resources/new(.:format)                   resources#new
           edit_resource GET    /resources/:id/edit(.:format)              resources#edit
                resource GET    /resources/:id(.:format)                   resources#show
                         PUT    /resources/:id(.:format)                   resources#update
                         DELETE /resources/:id(.:format)                   resources#destroy
             communities GET    /communities(.:format)                     communities#index
                         POST   /communities(.:format)                     communities#create
           new_community GET    /communities/new(.:format)                 communities#new
          edit_community GET    /communities/:id/edit(.:format)            communities#edit
               community GET    /communities/:id(.:format)                 communities#show
                         PUT    /communities/:id(.:format)                 communities#update
                         DELETE /communities/:id(.:format)                 communities#destroy
                networks GET    /networks(.:format)                        networks#index
                         POST   /networks(.:format)                        networks#create
             new_network GET    /networks/new(.:format)                    networks#new
            edit_network GET    /networks/:id/edit(.:format)               networks#edit
                 network GET    /networks/:id(.:format)                    networks#show
                         PUT    /networks/:id(.:format)                    networks#update
                         DELETE /networks/:id(.:format)                    networks#destroy
             topic_posts GET    /topics/:topic_id/posts(.:format)          posts#index
                         POST   /topics/:topic_id/posts(.:format)          posts#create
          new_topic_post GET    /topics/:topic_id/posts/new(.:format)      posts#new
         edit_topic_post GET    /topics/:topic_id/posts/:id/edit(.:format) posts#edit
              topic_post GET    /topics/:topic_id/posts/:id(.:format)      posts#show
                         PUT    /topics/:topic_id/posts/:id(.:format)      posts#update
                         DELETE /topics/:topic_id/posts/:id(.:format)      posts#destroy
                  topics GET    /topics(.:format)                          topics#index
                         POST   /topics(.:format)                          topics#create
               new_topic GET    /topics/new(.:format)                      topics#new
              edit_topic GET    /topics/:id/edit(.:format)                 topics#edit
                   topic GET    /topics/:id(.:format)                      topics#show
                         PUT    /topics/:id(.:format)                      topics#update
                         DELETE /topics/:id(.:format)                      topics#destroy
               topic_tag GET    /topics/tag/:tag(.:format)                 topics#index
            resource_tag GET    /resources/tag/:tag(.:format)              resources#index
                    root        /                                          home#index
        new_user_session GET    /users/login(.:format)                     devise/sessions#new
            user_session POST   /users/login(.:format)                     devise/sessions#create
    destroy_user_session DELETE /users/logout(.:format)                    devise/sessions#destroy
 user_omniauth_authorize        /users/auth/:provider(.:format)            devise/omniauth_callbacks#passthru {:provider=>/facebook/}
  user_omniauth_callback        /users/auth/:action/callback(.:format)     devise/omniauth_callbacks#(?-mix:facebook)
           user_password POST   /users/password(.:format)                  devise/passwords#create
       new_user_password GET    /users/password/new(.:format)              devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)             devise/passwords#edit
                         PUT    /users/password(.:format)                  devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)                    devise/registrations#cancel
       user_registration POST   /users(.:format)                           devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)                   devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)                      devise/registrations#edit
                         PUT    /users(.:format)                           devise/registrations#update
                         DELETE /users(.:format)                           devise/registrations#destroy
             rails_admin        /admin                                     RailsAdmin::Engine

Routes for RailsAdmin::Engine:
    dashboard GET         /                                      rails_admin/main#dashboard
        index GET|POST    /:model_name(.:format)                 rails_admin/main#index
          new GET|POST    /:model_name/new(.:format)             rails_admin/main#new
       export GET|POST    /:model_name/export(.:format)          rails_admin/main#export
  bulk_delete POST|DELETE /:model_name/bulk_delete(.:format)     rails_admin/main#bulk_delete
history_index GET         /:model_name/history(.:format)         rails_admin/main#history_index
  bulk_action POST        /:model_name/bulk_action(.:format)     rails_admin/main#bulk_action
         show GET         /:model_name/:id(.:format)             rails_admin/main#show
         edit GET|PUT     /:model_name/:id/edit(.:format)        rails_admin/main#edit
       delete GET|DELETE  /:model_name/:id/delete(.:format)      rails_admin/main#delete
 history_show GET         /:model_name/:id/history(.:format)     rails_admin/main#history_show
  show_in_app GET         /:model_name/:id/show_in_app(.:format) rails_admin/main#show_in_app

以下是我安装rails_admin的方法:

    rails g rails_admin:install
        SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
        This poses a security threat. It is strongly recommended that you
        provide a secret to prevent exploits that may be possible from crafted
        cookies. This will not be supported in future versions of Rack, and
        future versions will even invalidate your existing user cookies.

        Called from: /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/actionpack-3.2.9/lib/action_dispatch/middleware/session/abstract_store.rb:28:in `initialize'.

           -  Hello, RailsAdmin installer will help you set things up!
           -  I need to work with Devise, let's look at a few things first:
           -  Checking for a current installation of devise...
           -  Found it!
           -  Looks like you've already installed it, good!
           ?  Where do you want to mount rails_admin? Press <enter> for [admin] > manage
        gsub  config/routes.rb
       route  mount RailsAdmin::Engine => '/manage', :as => 'rails_admin'
           -  And you already set it up, good! We just need to know about your user model name...
           -  We found 'user' (should be one of 'user', 'admin', etc.)
           ?  Correct Devise model name if needed. Press <enter> for [user] > User
           -  Now setting up devise with user model name 'User':
    generate  devise
        SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
        This poses a security threat. It is strongly recommended that you
        provide a secret to prevent exploits that may be possible from crafted
        cookies. This will not be supported in future versions of Rack, and
        future versions will even invalidate your existing user cookies.

        Called from: /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/actionpack-3.2.9/lib/action_dispatch/middleware/session/abstract_store.rb:28:in `initialize'.

      invoke  active_record
      create    db/migrate/20130214195616_add_devise_to_users.rb
      insert    app/models/user.rb
       route  devise_for :users
           -  Now you'll need an initializer...
           -  You already have a config file. You're updating, heh? I'm generating a new 'rails_admin.rb.example' that you can review.
      create  config/initializers/rails_admin.rb.example
/Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/activerecord-3.2.9/lib/active_record/reflection.rb:385:in `block in source_reflection': undefined method `klass' for nil:NilClass (NoMethodError)
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/activerecord-3.2.9/lib/active_record/reflection.rb:385:in `collect'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/activerecord-3.2.9/lib/active_record/reflection.rb:385:in `source_reflection'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/activerecord-3.2.9/lib/active_record/reflection.rb:375:in `rescue in foreign_key'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/activerecord-3.2.9/lib/active_record/reflection.rb:373:in `foreign_key'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/adapters/active_record.rb:292:in `association_foreign_key_lookup'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/adapters/active_record.rb:72:in `block in associations'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/adapters/active_record.rb:65:in `map'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/adapters/active_record.rb:65:in `associations'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/fields/factories/association.rb:6:in `block in <top (required)>'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/fields.rb:54:in `call'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/fields.rb:54:in `block (2 levels) in factory'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/fields.rb:54:in `each'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/fields.rb:54:in `find'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/fields.rb:54:in `block in factory'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/fields.rb:50:in `each'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/fields.rb:50:in `factory'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/has_fields.rb:130:in `_fields'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/has_fields.rb:128:in `_fields'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/has_fields.rb:108:in `all_fields'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/rails_admin/config/has_fields.rb:83:in `fields'
    from (erb):64:in `block in template'
    from (erb):53:in `map'
    from (erb):53:in `template'
    from /Users/iyerushalmi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/erb.rb:838:in `eval'
    from /Users/iyerushalmi/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/erb.rb:838:in `result'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/file_manipulation.rb:117:in `block in template'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/create_file.rb:54:in `call'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/create_file.rb:54:in `render'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/create_file.rb:63:in `block (2 levels) in invoke!'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/create_file.rb:63:in `open'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/create_file.rb:63:in `block in invoke!'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/empty_directory.rb:133:in `call'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/empty_directory.rb:133:in `invoke_with_conflict_check'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/create_file.rb:61:in `invoke!'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions.rb:95:in `action'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/create_file.rb:26:in `create_file'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/actions/file_manipulation.rb:116:in `template'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/rails_admin-0.4.4/lib/generators/rails_admin/install_generator.rb:66:in `install'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/task.rb:27:in `run'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/invocation.rb:120:in `invoke_task'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/invocation.rb:126:in `block in invoke_all'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/invocation.rb:126:in `each'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/invocation.rb:126:in `map'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/invocation.rb:126:in `invoke_all'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/group.rb:238:in `dispatch'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/thor-0.17.0/lib/thor/base.rb:434:in `start'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/railties-3.2.9/lib/rails/generators.rb:171:in `invoke'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/railties-3.2.9/lib/rails/commands/generate.rb:12:in `<top (required)>'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251:in `require'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251:in `block in require'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/activesupport-3.2.9/lib/active_support/dependencies.rb:251:in `require'
    from /Users/iyerushalmi/.rvm/gems/ruby-1.9.3-p374/gems/railties-3.2.9/lib/rails/commands.rb:29:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

5 个答案:

答案 0 :(得分:5)

编辑:找到修复程序。请参阅this SO discussion

进入主ApplicationController并更改

rescue_from CanCan::AccessDenied do |e|
  redirect_to root_path, alert: e.message
end

rescue_from CanCan::AccessDenied do |e|
  redirect_to '/', alert: e.message
end

赋予任何符号路径名称将导致RoutingException,因为Rails正在错误的路由表中查找名称。指定文字根路径会绕过查找,并在处理它时为主应用程序的ApplicationController提供第一个破解。这就是你想要的。

hr下方的原帖:


我遇到了类似的错误,如果非管理员用户访问我的'/ admin'路由,那么ActiveAdmin + CanCan会尝试将他踢出去。 (顺便说一下,通过添加better_errors Gem,您可以获得更清晰的错误报告。)我收到异常报告,我可以在路由失败发生时在本地变量中看到正确的错误消息。

我还可以看到,感谢better_errors的“live shell”,生成RoutingError的ActionController是RailsAdmin::MainController。这告诉我,我们需要弄清楚如何告诉RailsAdmin重定向到应用程序根路径,而不是引擎根路径。

答案 1 :(得分:1)

您的路由无法正常工作的原因是您已注入

mount RailsAdmin::Engine => '/admin', :as => 'rails_admin'

位于routes.rb文件的底部。了解路线从上到下优先考虑。当路由到网址时,它将从列表顶部开始并向下移动。一旦发现匹配的路线,Rails就会将其发送给相应的控制器并采取行动。

通常,我发现最好将第三方API移到API列表的顶部。如果最终出现冲突问题,我可以更改自己创建的路线。更容易处理。

所以将Devise和RailsAdmin路线移到顶部并告诉我们你得到了什么。

答案 2 :(得分:0)

尝试将设计和管理路线移动到路线文件的顶部。

答案 3 :(得分:0)

我遇到了同样的问题,但只有在我使用我的用户模型登录时才会出现问题。如果我没有登录,则重定向到我的sign_in页面。

<强>更新

我发生的事情是我的用户模型不允许:manage仪表板访问的资源。

我加入此授权后,管理面板就可以了。

答案 4 :(得分:0)

使用main_app中的routes.rb来引用主要应用路由,如documentation中所述。

class ApplicationController < ActionController::Base
  rescue_from CanCan::AccessDenied do |exception|
    redirect_to main_app.root_path, :alert => exception.message
  end
end