opensource-developer
opensource-developer

Reputation: 3038

Could not find devise mapping for path

I have the following routes defined in my routes.rb

devise_for :users, controllers: { registrations: "network/registrations",sessions: 'network/sessions', passwords: 'network/passwords' }


devise_scope :user do
   get "registrations/show" => "network/registrations", as: :show_user_profile
end

and when i do rake routes i also see

 network_show_user_profile GET    /network/registrations/show(.:format)                                                                network/registrations#show

But when i try to access the path /network/registrations/show

i get the below exception

Could not find devise mapping for path "/network/registrations/show". This may happen for two reasons:

1) You forgot to wrap your route inside the scope block. For example:

  devise_scope :user do
    get "/some/route" => "some_devise_controller"
  end

2) You are testing a Devise controller bypassing the router.
   If so, you can explicitly tell Devise which mapping to use:

   @request.env["devise.mapping"] = Devise.mappings[:user]

I tried to modify the routes.rb and added

devise_scope :user do
  get 'user_profile' => 'registrations#search', :as => 'user_profile'
end

and when i access user_profile path, i get the error

The action 'show' could not be found for Network::RegistrationsController

but when i add the action show to the controller I again get the same exception message

Could not find devise mapping for path "/network/registrations/show". This may happen for two reasons:

1) You forgot to wrap your route inside the scope block. For example:

  devise_scope :user do
    get "/some/route" => "some_devise_controller"
  end

2) You are testing a Devise controller bypassing the router.
   If so, you can explicitly tell Devise which mapping to use:

   @request.env["devise.mapping"] = Devise.mappings[:user]

any help as to what i am doing wrong would be appreciated. Thanks.

Upvotes: 0

Views: 1365

Answers (1)

Nimish Gupta
Nimish Gupta

Reputation: 3175

I tried adding same routes that you did

Rails.application.routes.draw do

  devise_for :users, controllers: { registrations: "network/registrations",sessions: 'network/sessions', passwords: 'network/passwords' }


  devise_scope :user do
     get "registrations/show" => "network/registrations", as: :show_user_profile
  end
end

But instead of

network_show_user_profile GET /network/registrations/show(.:format)

I got show_user_profile GET /registrations/show(.:format) registrations#show

So I replaced this routes file with below

Rails.application.routes.draw do

  devise_for :users, controllers: { registrations: "network/registrations",sessions: 'network/sessions', passwords: 'network/passwords' }


  devise_scope :user do
     get "/network/registrations/show" => "network/registrations#show", as: :show_user_profile
  end
end

I also created an action show in network/registrations_controller.rb and

everything works perfectly for me.

Hope this helps.

Upvotes: 1

Related Questions