Could not find devise mapping for path “/sessions/user” devise log in error

前端 未结 5 1992
名媛妹妹
名媛妹妹 2021-02-19 04:43

Very frustrating for the last few days.

I have a rails app with Devise installed where I generated a new User model and I generated Devise views as well.

This h

相关标签:
5条回答
  • 2021-02-19 05:07

    Error is telling you:

    devise_scope :user do
      match '/sessions/user', to: 'devise/sessions#create', via: :post
    end
    

    did you try that?

    0 讨论(0)
  • 2021-02-19 05:09

    This error (AbstractController::ActionNotFound - Could not find devise mapping for path) can arise if devise_scope is passed a plural scope instead of a singular scope.

    The devise_for method takes a plural form of model scope (i.e. :users) whereas the devise_scope takes the singular form (i.e. :user).

    From the devise documentations (http://www.rubydoc.info/github/plataformatec/devise/ActionDispatch%2FRouting%2FMapper%3Adevise_scope):

    Also be aware of that 'devise_scope' and 'as' use the singular form of the noun where other devise route commands expect the plural form. This would be a good and working example.

    devise_scope :user do
      get "/some/route" => "some_devise_controller"
    end
    devise_for :users
    
    0 讨论(0)
  • 2021-02-19 05:19

    in your routes.rb file, try wrapping your routes inside the scope block as the error message suggests. Here is an example:

    devise_scope :user do
       get "signup", to: "devise/registrations#new"
       get "login", to: "devise/sessions#new"
       get "logout", to: "devise/sessions#destroy"
    end
    

    This will give you nicely named routes.

    And by the way, if you are using Rails 4, get rid of the match method. you need to specify the HTTP verb.


    OBSOLETE old answer:

    (Below is the old obsolete version of the code, shown for reference. Use the code above.)

    devise_for :users, path_names: { sign_in: 'login', sign_out: 'logout', sign_up: 'signup' }
    

    AND

    match '/sessions/user', to: 'devise/sessions#create', via: :post
    
    0 讨论(0)
  • 2021-02-19 05:21

    Be careful if you nave namespaced routes to declare the devise_scope a little different:

    namespace :api, defaults: {format: 'json'} do 
      namespace :v1 do 
        devise_scope :api_v1_user do
          ...
        end
      end
    end
    
    0 讨论(0)
  • 2021-02-19 05:28
    devise_scope :user do
      # add any route which is giving above error message
    end 
    
    0 讨论(0)
提交回复
热议问题