ActionController :: RoutingError (aucune route correspond "/ user_sessions /…)
-
28-10-2019 - |
Question
Je suis super nouveau sur Ruby sur Rails. J'essaie de créer un système d'authentification en utilisant Authlogic (suivant cela Didacticiel). L'erreur que j'obtiens est juste après avoir soumis le formulaire de connexion:
No route matches "/user_sessions/%23%3CUserSession:0x103486aa8%3E"
Étonnamment, l'URL de la page juste après la soumission du formulaire, ce qui soulève également l'erreur est:
http://localhost:3000/user_sessions/%23%3CUserSession:0x103486aa8%3E
Je n'ai aucune idée de ce que j'ai fait de mal et d'où vient cette étrange chose du code d'utilisateur !!!
C'est à quoi ressemble mon formulaire de connexion:
<% form_for @user_session do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :username %><br />
<%= f.text_field :username%>
</p>
<p>
<%= f.label :password %><br />
<%= f.password_field :password %>
</p>
<p><%= f.submit "Submit" %></p>
<% end %>
Voici ma classe d'utilisateurs:
class UserSession < Authlogic::Session::Base
def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end
end
et le créer action de mon USERSESSION Controller:
def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
flash[:notice] = "Login successful!"
redirect_back_or_default root_path
else
render :action => :new
end
end
Méthode "redirect_back_or_default" dans ApplicationController:
def redirect_back_or_default(default)
redirect_to(session[:return_to] || default)
session[:return_to] = nil
end
Et enfin tout ce qui concerne l'utilisateur routes.rb:
resources :user_sessions
match 'login' => "user_sessions#destroy", :as => :login
match 'logout' => "user_sessions#destroy", :as => :logout
Ce sont les codes qui je La pensée pourrait être impliquée dans l'obtention de cette erreur. Si je devais ajouter un peu plus de code pour le rendre plus clair, veuillez me le faire savoir.
La solution
Ok, d'abord, vous avez un mauvais itinéraire:
match '/login', :to => 'user_sessions#new', :as => 'login'
noter la new
à la place de destroy
De plus, le TO_KEY n'est pas nécessaire dans les versions ultérieures - j'utilise Rails 3 et je ne l'ai pas dans mon modèle d'utilisateur.
Autres conseils
Besoin de changer votre itinéraire pour ne pas correspondre à la connexion pour détruire. Voici le paramètre d'itinéraire que j'ai ... (à partir de "Agile Web Development with Rails").
controller :user_sessions do
get 'login' => :new
post 'login' => :create
delete 'logout' => :destroy
end