web-dev-qa-db-fra.com

Impossible de trouver le mappage de carte associée au journal de connexion du chemin "/ sessions/utilisateur"

Très frustrant ces derniers jours. 

J'ai une application Rails avec Devise installée, où j'ai généré un nouveau modèle utilisateur et des vues Devise.

Cela se produit lorsque j'essaie de me connecter en tant qu'utilisateur existant lorsque je clique sur "Connexion" après avoir renseigné les champs e-mail et mot de passe:

AbstractController::ActionNotFound - Could not find devise mapping for path "/sessions/user".
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]

:
  devise (3.2.4) app/controllers/devise_controller.rb:84:in `unknown_action!'
  devise (3.2.4) app/controllers/devise_controller.rb:59:in `assert_is_devise_resource!'
  devise (3.2.4) app/controllers/devise_controller.rb:97:in `require_no_authentication'
  activesupport (4.0.4) lib/active_support/callbacks.rb:397:in `_run__1955514966561508052__process_action__callbacks'
  activesupport (4.0.4) lib/active_support/callbacks.rb:80:in `run_callbacks'
  actionpack (4.0.4) lib/abstract_controller/callbacks.rb:17:in `process_action'
  actionpack (4.0.4) lib/action_controller/metal/rescue.rb:29:in `process_action'
  actionpack (4.0.4) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
  activesupport (4.0.4) lib/active_support/notifications.rb:159:in `block in instrument'
  activesupport (4.0.4) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.0.4) lib/active_support/notifications.rb:159:in `instrument'
  actionpack (4.0.4) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
  actionpack (4.0.4) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
  activerecord (4.0.4) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  actionpack (4.0.4) lib/abstract_controller/base.rb:136:in `process'
  actionpack (4.0.4) lib/abstract_controller/rendering.rb:44:in `process'
  actionpack (4.0.4) lib/action_controller/metal.rb:195:in `dispatch'
  actionpack (4.0.4) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
  actionpack (4.0.4) lib/action_controller/metal.rb:231:in `block in action'
  actionpack (4.0.4) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
  actionpack (4.0.4) lib/action_dispatch/routing/route_set.rb:48:in `call'
  actionpack (4.0.4) lib/action_dispatch/journey/router.rb:71:in `block in call'
  actionpack (4.0.4) lib/action_dispatch/journey/router.rb:59:in `call'
  actionpack (4.0.4) lib/action_dispatch/routing/route_set.rb:674:in `call'
  warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
  warden (1.2.3) lib/warden/manager.rb:34:in `call'
  rack (1.5.2) lib/rack/etag.rb:23:in `call'
  rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
  rack (1.5.2) lib/rack/head.rb:11:in `call'
  actionpack (4.0.4) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
  actionpack (4.0.4) lib/action_dispatch/middleware/flash.rb:241:in `call'
  rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
  rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
  actionpack (4.0.4) lib/action_dispatch/middleware/cookies.rb:486:in `call'
  activerecord (4.0.4) lib/active_record/query_cache.rb:36:in `call'
  activerecord (4.0.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
  activerecord (4.0.4) lib/active_record/migration.rb:373:in `call'
  actionpack (4.0.4) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
  activesupport (4.0.4) lib/active_support/callbacks.rb:373:in `_run__2142997860843545523__call__callbacks'
  activesupport (4.0.4) lib/active_support/callbacks.rb:80:in `run_callbacks'
  actionpack (4.0.4) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  actionpack (4.0.4) lib/action_dispatch/middleware/reloader.rb:64:in `call'
  actionpack (4.0.4) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
  better_errors (1.1.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
  better_errors (1.1.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
  better_errors (1.1.0) lib/better_errors/middleware.rb:56:in `call'
  actionpack (4.0.4) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
  actionpack (4.0.4) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  railties (4.0.4) lib/Rails/rack/logger.rb:38:in `call_app'
  railties (4.0.4) lib/Rails/rack/logger.rb:20:in `block in call'
  activesupport (4.0.4) lib/active_support/tagged_logging.rb:68:in `block in tagged'
  activesupport (4.0.4) lib/active_support/tagged_logging.rb:26:in `tagged'
  activesupport (4.0.4) lib/active_support/tagged_logging.rb:68:in `tagged'
  railties (4.0.4) lib/Rails/rack/logger.rb:20:in `call'
  quiet_assets (1.0.2) lib/quiet_assets.rb:18:in `call_with_quiet_assets'
  actionpack (4.0.4) lib/action_dispatch/middleware/request_id.rb:21:in `call'
  rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
  rack (1.5.2) lib/rack/runtime.rb:17:in `call'
  activesupport (4.0.4) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  actionpack (4.0.4) lib/action_dispatch/middleware/static.rb:64:in `call'
  rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
  railties (4.0.4) lib/Rails/engine.rb:511:in `call'
  railties (4.0.4) lib/Rails/application.rb:97:in `call'
  rack (1.5.2) lib/rack/lock.rb:17:in `call'
  rack (1.5.2) lib/rack/content_length.rb:14:in `call'
  rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
  /Users/AaronWilliamson/.rubies/Ruby-2.1.0/lib/Ruby/2.1.0/webrick/httpserver.rb:138:in `service'
  /Users/AaronWilliamson/.rubies/Ruby-2.1.0/lib/Ruby/2.1.0/webrick/httpserver.rb:94:in `run'
  /Users/AaronWilliamson/.rubies/Ruby-2.1.0/lib/Ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'

Le fait est que, lorsque je m'inscris en tant que nouvel utilisateur, cela fonctionne parfaitement. Je peux remplir les champs appropriés, cliquer sur "Inscrivez-vous" et il me notifie que je me suis connecté avec succès et me redirige vers l'URL racine indiquant à l'utilisateur qu'il est connecté. L'erreur ne se produit que lorsque j'essaie de me connecter.

Voici mes itinéraires:

Ripelist::Application.routes.draw do
  devise_for :users, path_names: { sign_in: 'login', sign_out: 'logout', sign_up: 'signup' }
  root to: 'listings#index'
  match '/sessions/user', to: 'devise/sessions#create', via: :post

  resources :users
  resources :listings
  resources :categories
  resources :sessions
end

Quelqu'un peut aider?

14
Aaron

dans votre fichier routes.rb, essayez d’envelopper vos itinéraires dans le bloc d’étendue comme le suggère le message d’erreur. Voici un exemple: 

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

Cela vous donnera des itinéraires bien nommés. 

Et au fait, si vous utilisez Rails 4, supprimez la méthode de correspondance. vous devez spécifier le verbe HTTP. 


Ancienne réponse ancienne:

(Ci-dessous, l'ancienne version obsolète du code, présentée à titre de référence. Utilisez le code ci-dessus.)

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

ET

match '/sessions/user', to: 'devise/sessions#create', via: :post
14
Wally Ali

Faites attention si vous nave les routes de type namespaced pour déclarer le système un peu différent:

namespace :api, defaults: {format: 'json'} do 
  namespace :v1 do 
    devise_scope :api_v1_user do
      ...
    end
  end
end
22
ajbraus

Cette erreur (AbstractController::ActionNotFound - Could not find devise mapping for path) peut survenir si devise_scope se voit attribuer une portée plurielle au lieu d'une portée singulière.

La méthode devise_for prend une forme plurielle d’étendue de modèle (c'est-à-dire: utilisateurs) tandis que devise_scope prend la forme singulière (c'est-à-dire :user). 

D'après les documents documentaires ( http://www.rubydoc.info/github/plataformatec/devise/ActionDispatch%2FRouting%2FMapper%3Adevise_scope ):

Sachez également que 'devise_scope' et 'en tant que' utilisent la forme singulière de , Le nom où d'autres commandes de routines relatives attendent la forme plurielle. Ce serait un bon exemple de travail.

devise_scope :user do
  get "/some/route" => "some_devise_controller"
end
devise_for :users
7
Neil Atkinson

L'erreur vous dit:

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

avez-vous essayé ça?

1
juanpastas
devise_scope :user do
  # add any route which is giving above error message
end 
0
Aaganja