Vieenay Siingh
Vieenay Siingh

Reputation: 867

Routing Error No route matches {:action=>"show", :controller=>"dashboard"}

I want that when Admin sign in ,he should be redirected to "dashboard" page and if a normal user sign in, they should be redirected root of application which is "posts#index". When normal user sign up, it works perfectly means it takes users to root path of application. But when Admin log in, it shows "Routing Error No route matches {:action=>"show", :controller=>"dashboard"} " error. I have add is_Admin column in User table for Admin.

ApplicationController.rb

class ApplicationController < ActionController::Base
  protect_from_forgery
  def after_sign_in_path_for(user)
    if current_user.is_Admin?
      redirect_to  dashboard_path
    else
      :root
    end
  end
end

Dashboard_controller.rb

class DashboardController < ApplicationController
  def index
    @users = User.all
  end
end

views/dashboard/index.html.erb

<h2>Admin Area</h2>
<table>
  <tr>
    <th> User Email </th>
    <th> User Registered Time</th>
    <th> Login Count</th>
  </tr>
  <% @users.each do |user| %>
    <tr>
      <td><%= user.email %></td>
      <td><%= user.created_at %></td>
      <td><%= user. sign_in_count %></td>
    </tr>
  <% end %>
</table>

routes.rb

Infra::Application.routes.draw do
  devise_for :users

  resources :posts
  root :to => "posts#index"
  #match "dashboard" => "dashboard#index"

  resources :dashboard 
end

rake routes output is below:

 rake routes
       new_user_session GET    /users/sign_in(.:format)       devise/sessions#new
           user_session POST   /users/sign_in(.:format)       devise/sessions#create
   destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy
          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
ancel_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
                  posts GET    /posts(.:format)               posts#index
                        POST   /posts(.:format)               posts#create
               new_post GET    /posts/new(.:format)           posts#new
              edit_post GET    /posts/:id/edit(.:format)      posts#edit
                   post GET    /posts/:id(.:format)           posts#show
                        PUT    /posts/:id(.:format)           posts#update
                        DELETE /posts/:id(.:format)           posts#destroy
                   root        /                              posts#index
        dashboard_index GET    /dashboard(.:format)           dashboard#index
                        POST   /dashboard(.:format)           dashboard#create
          new_dashboard GET    /dashboard/new(.:format)       dashboard#new
         edit_dashboard GET    /dashboard/:id/edit(.:format)  dashboard#edit
              dashboard GET    /dashboard/:id(.:format)       dashboard#show
                        PUT    /dashboard/:id(.:format)       dashboard#update
                        DELETE /dashboard/:id(.:format)       dashboard#destroy

StackTree

Started POST "/users/sign_in" for 127.0.0.1 at 2013-03-31 01:28:36 +0530
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"j5KOmGDpI7Xwit4U7JUysB3EqhIogljjCDlSIK158/s=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Sign in"}
  [1m[36mUser Load (1.0ms)[0m  [1mSELECT "users".* FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1[0m
  [1m[35m (0.0ms)[0m  begin transaction
  [1m[36m (2.0ms)[0m  [1mUPDATE "users" SET "last_sign_in_at" = '2013-03-30 19:44:14.252484', "current_sign_in_at" = '2013-03-30 19:58:37.089835', "sign_in_count" = 50, "updated_at" = '2013-03-30 19:58:37.091835' WHERE "users"."id" = 1[0m
  [1m[35m (195.0ms)[0m  commit transaction
Redirected to http://localhost:3000/dashboard
Completed 500 Internal Server Error in 423ms

AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".):
  actionpack (3.2.12) lib/action_controller/metal/rendering.rb:15:in `render'
  actionpack (3.2.12) lib/action_controller/metal/instrumentation.rb:40:in `block (2 levels) in render'
  activesupport (3.2.12) lib/active_support/core_ext/benchmark.rb:5:in `block in ms'
  c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/benchmark.rb:295:in `realtime'
  activesupport (3.2.12) lib/active_support/core_ext/benchmark.rb:5:in `ms'
  actionpack (3.2.12) lib/action_controller/metal/instrumentation.rb:40:in `block in render'
  actionpack (3.2.12) lib/action_controller/metal/instrumentation.rb:83:in `cleanup_view_runtime'
  activerecord (3.2.12) lib/active_record/railties/controller_runtime.rb:24:in `cleanup_view_runtime'
  actionpack (3.2.12) lib/action_controller/metal/instrumentation.rb:39:in `render'
  actionpack (3.2.12) lib/action_controller/metal/implicit_render.rb:10:in `default_render'
  actionpack (3.2.12) lib/action_controller/metal/responder.rb:232:in `default_render'
  actionpack (3.2.12) lib/action_controller/metal/responder.rb:160:in `to_html'
  actionpack (3.2.12) lib/action_controller/metal/responder.rb:153:in `respond'
  actionpack (3.2.12) lib/action_controller/metal/responder.rb:146:in `call'
  actionpack (3.2.12) lib/action_controller/metal/mime_responds.rb:239:in `respond_with'
  devise (2.2.3) app/controllers/devise/sessions_controller.rb:18:in `create'
  actionpack (3.2.12) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
  actionpack (3.2.12) lib/abstract_controller/base.rb:167:in `process_action'
  actionpack (3.2.12) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (3.2.12) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
  activesupport (3.2.12) lib/active_support/callbacks.rb:458:in `_run__176658777__process_action__917642946__callbacks'
  activesupport (3.2.12) lib/active_support/callbacks.rb:405:in `__run_callback'
  activesupport (3.2.12) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
  activesupport (3.2.12) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.2.12) lib/abstract_controller/callbacks.rb:17:in `process_action'
  actionpack (3.2.12) lib/action_controller/metal/rescue.rb:29:in `process_action'
  actionpack (3.2.12) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
  activesupport (3.2.12) lib/active_support/notifications.rb:123:in `block in instrument'
  activesupport (3.2.12) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (3.2.12) lib/active_support/notifications.rb:123:in `instrument'
  actionpack (3.2.12) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
  actionpack (3.2.12) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
  activerecord (3.2.12) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  actionpack (3.2.12) lib/abstract_controller/base.rb:121:in `process'
  actionpack (3.2.12) lib/abstract_controller/rendering.rb:45:in `process'
  actionpack (3.2.12) lib/action_controller/metal.rb:203:in `dispatch'
  actionpack (3.2.12) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
  actionpack (3.2.12) lib/action_controller/metal.rb:246:in `block in action'
  actionpack (3.2.12) lib/action_dispatch/routing/route_set.rb:73:in `call'
  actionpack (3.2.12) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
  actionpack (3.2.12) lib/action_dispatch/routing/route_set.rb:36:in `call'
  actionpack (3.2.12) lib/action_dispatch/routing/mapper.rb:42:in `call'
  journey (1.0.4) lib/journey/router.rb:68:in `block in call'
  journey (1.0.4) lib/journey/router.rb:56:in `each'
  journey (1.0.4) lib/journey/router.rb:56:in `call'
  actionpack (3.2.12) lib/action_dispatch/routing/route_set.rb:601:in `call'
  warden (1.2.1) lib/warden/manager.rb:35:in `block in call'
  warden (1.2.1) lib/warden/manager.rb:34:in `catch'
  warden (1.2.1) lib/warden/manager.rb:34:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
  rack (1.4.5) lib/rack/etag.rb:23:in `call'
  rack (1.4.5) lib/rack/conditionalget.rb:35:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/head.rb:14:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/flash.rb:242:in `call'
  rack (1.4.5) lib/rack/session/abstract/id.rb:210:in `context'
  rack (1.4.5) lib/rack/session/abstract/id.rb:205:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/cookies.rb:341:in `call'
  activerecord (3.2.12) lib/active_record/query_cache.rb:64:in `call'
  activerecord (3.2.12) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
  activesupport (3.2.12) lib/active_support/callbacks.rb:405:in `_run__395807340__call__550232966__callbacks'
  activesupport (3.2.12) lib/active_support/callbacks.rb:405:in `__run_callback'
  activesupport (3.2.12) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
  activesupport (3.2.12) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (3.2.12) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/reloader.rb:65:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
  railties (3.2.12) lib/rails/rack/logger.rb:32:in `call_app'
  railties (3.2.12) lib/rails/rack/logger.rb:16:in `block in call'
  activesupport (3.2.12) lib/active_support/tagged_logging.rb:22:in `tagged'
  railties (3.2.12) lib/rails/rack/logger.rb:16:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/request_id.rb:22:in `call'
  rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
  rack (1.4.5) lib/rack/runtime.rb:17:in `call'
  activesupport (3.2.12) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
  rack (1.4.5) lib/rack/lock.rb:15:in `call'
  actionpack (3.2.12) lib/action_dispatch/middleware/static.rb:62:in `call'
  railties (3.2.12) lib/rails/engine.rb:479:in `call'
  railties (3.2.12) lib/rails/application.rb:223:in `call'
  rack (1.4.5) lib/rack/content_length.rb:14:in `call'
  railties (3.2.12) lib/rails/rack/log_tailer.rb:17:in `call'
  rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
  c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
  c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
  c:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'


  Rendered c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/_trace.erb (3.0ms)
  Rendered c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (4.0ms)
  Rendered c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (103.0ms)

I have defined "def after_sign_in_path_for(user)" in application_controller.rb which decide where to redirect on basis of type of user. I think, problem is here.

Upvotes: 0

Views: 4106

Answers (4)

Sawo Cliff
Sawo Cliff

Reputation: 3038

Use this to get it working:

    redirect_to main_app.root_path

add the main_app to your route path

Upvotes: 0

hellaxe
hellaxe

Reputation: 491

Method after_sign_in_path_for should return path, not redirect.

class ApplicationController < ActionController::Base
  protect_from_forgery
  def after_sign_in_path_for(user)
    if current_user.is_Admin?
      dashboard_index_path
    else
      :root
    end
  end
end

Upvotes: 2

house9
house9

Reputation: 20624

1) - anytime you change routes, you should probably restart the rails process

then I would try using match in-place of resources for a dashboard (guessing you don't need all of the CRUD actions?)

match "dashboard" => "dashboard#index"

redirection should be

redirect_to dashboard_path

if you do use resources, it would be redirect_to dashboards_path (plural for the index action)

the order of routes is also important, maybe put your match closer to the top of the routes?

see also: http://guides.rubyonrails.org/routing.html

Upvotes: 0

Andrzej Krzywda
Andrzej Krzywda

Reputation: 181

Change

resources :dashboard 

to

resource :dashboard 

Upvotes: 0

Related Questions