diff --git a/README.md b/README.md index 2742fde389..5979da55c5 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ It will modify your `config/routes.rb`, adding: mount RailsAdmin::Engine => '/admin', :as => 'rails_admin' # Feel free to change '/admin' to any namespace you need. ``` -Note: Your RailsAdmin namespace cannot match your Devise model name, or you will get an infinite redirect error. +Note: The `devise_for` route must be placed before the mounted engine. The following will generate infinite redirects. The following will generate infinite redirects. ```ruby @@ -91,11 +91,11 @@ mount RailsAdmin::Engine => '/admin', :as => 'rails_admin' devise_for :admins ``` -Consider renaming your RailsAdmin namespace: +This will resolve the infinite redirect error: ```ruby -mount RailsAdmin::Engine => '/rails_admin', :as => 'rails_admin' devise_for :admins +mount RailsAdmin::Engine => '/rails_admin', :as => 'rails_admin' ``` See [#715](https://github.com/sferik/rails_admin/issues/715) for more details. diff --git a/lib/generators/rails_admin/install_generator.rb b/lib/generators/rails_admin/install_generator.rb index 8e866ed32d..03053612fa 100644 --- a/lib/generators/rails_admin/install_generator.rb +++ b/lib/generators/rails_admin/install_generator.rb @@ -37,6 +37,10 @@ def install display "Looks like you've already installed it, good!" end + namespace = ask_for("Where do you want to mount rails_admin?", "admin", _namespace) + gsub_file "config/routes.rb", /mount RailsAdmin::Engine => \'\/.+\', :as => \'rails_admin\'/, '' + route("mount RailsAdmin::Engine => '/#{namespace}', :as => 'rails_admin'") + unless routes.index("devise_for") model_name = ask_for("What would you like the user model to be called?", "user", _model_name) display "Now setting up devise with user model name '#{model_name}':" @@ -75,9 +79,6 @@ def install end display "Adding a migration..." migration_template 'migration.rb', 'db/migrate/create_rails_admin_histories_table.rb' rescue display $!.message - namespace = ask_for("Where do you want to mount rails_admin?", "admin", _namespace) - gsub_file "config/routes.rb", /mount RailsAdmin::Engine => \'\/.+\', :as => \'rails_admin\'/, '' - route("mount RailsAdmin::Engine => '/#{namespace}', :as => 'rails_admin'") display "Job's done: migrate, start your server and visit '/#{namespace}'!", :blue end end diff --git a/spec/dummy_app/config/routes.rb b/spec/dummy_app/config/routes.rb index b48b940d36..1a6424d183 100644 --- a/spec/dummy_app/config/routes.rb +++ b/spec/dummy_app/config/routes.rb @@ -2,8 +2,8 @@ # Needed for :show_in_app tests resources :players, :only => [:show] - mount RailsAdmin::Engine => '/admin', :as => 'rails_admin' devise_for :users + mount RailsAdmin::Engine => '/admin', :as => 'rails_admin' root :to => "rails_admin::Main#dashboard" # https://github.com/sferik/rails_admin/issues/362 match ':controller(/:action(/:id(.:format)))'