ActionController :: RoutingError (sin coincidencia de ruta "/user_sessions/...)
-
28-10-2019 - |
Pregunta
Soy súper nuevo en Ruby en Rails. Estoy tratando de hacer un sistema de autenticación usando AuthLogic (siguiendo esto tutorial). El error que recibo es justo después de enviar el formulario de inicio de sesión:
No route matches "/user_sessions/%23%3CUserSession:0x103486aa8%3E"
Sorprendentemente, la URL de la página justo después de que se envíe el formulario, lo que también plantea el error es:
http://localhost:3000/user_sessions/%23%3CUserSession:0x103486aa8%3E
¡No tengo idea de lo que he hecho mal y de dónde viene ese extraño código del código de usuarios!
Así es como se ve mi forma de inicio de sesión:
<% 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 %>
Aquí está mi clase de usuarios:
class UserSession < Authlogic::Session::Base
def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end
end
y el crear acción de mi UserssionSessionController:
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étodo "redirect_back_or_default" en Application Controller:
def redirect_back_or_default(default)
redirect_to(session[:return_to] || default)
session[:return_to] = nil
end
Y, por último, todo lo relacionado con user_sessions en rutas.rb:
resources :user_sessions
match 'login' => "user_sessions#destroy", :as => :login
match 'logout' => "user_sessions#destroy", :as => :logout
Estos son los códigos que yo El pensamiento podría estar involucrado en obtener ese error. Si debo agregar más código para dejarlo más claro, hágamelo saber.
Solución
Ok, primero, tienes una mala ruta:
match '/login', :to => 'user_sessions#new', :as => 'login'
nota la new
en vez de destroy
Además, el TO_Key no es necesario en versiones posteriores: estoy usando Rails 3 y no lo tengo en mi modelo de usuario.
Otros consejos
Definitivamente necesito cambiar su ruta para no igualar el inicio de sesión para destruir. Aquí está la configuración de ruta que tengo ... (del ejemplo de "Desarrollo web ágil con Rails").
controller :user_sessions do
get 'login' => :new
post 'login' => :create
delete 'logout' => :destroy
end