En el redirect, el parametro que le paso (uri_aux) es porque hago un
reset a las sesiones en los login. Por lo tanto no me sirve de nada
pasarlo por el objeto sesiones porque se va a destruir luego.
if request.post?
reset_session
user = User.authenticate(params[:name], params[:password])
if user
session[:user_id] = user.id
session[:current_project_id] =
user.user_projects.collect{|x|Project.find(x.project_id)}.first
redirect_to( @uri || {:controller => “users”, :action => “index” })
return
else
flash[:error] = “Usuario y/o password incorrectos.\n ¿Olvidó su contraseña?”
end
end
render(:layout => false)
end
El problema lo tengo en que cuando intento entrar por primera vez en el
sistema, por ejemplo “localhost/projects/1”, me redirecciona siempre a
“localhost/users/index”. La variable @uri en el redirect_to parece estar
a nil, cuando si pruebo en la vista su contenido, me muestra
“/projects/1”.
Otra prueba que he hecho es poniendo:
redirect_to ("/projects/1" || {:controller => "…}), y me
redirecciona a “projects/1”.
La parte del authorize la hace bien. Hay lo importante es que pase por
parametro el uri, y lo pasa. El problema está en el login, que en el
redirect_to el valor de @uri es nil.
Si le he hecho la asignacion @uri = params[:uri_aux], ¿como es que no
muestran el mismo valor?
He probado el hacer @uri = params[:uri_aux].to_s, pero lo mismo
que antes, nada.
Ya se solucionó!! El problema estaba en que llamaba dos veces al metodo
login. La primera vez para pintar la pantalla de login y la segunda vez
para loguear al usuario. Es por eso que no cogia esos valores. En la
segunda llamada a login no tenia constancia de ello. Por lo tanto he
hecho en hidden_field_tag en la vista para que vuelva a enviar el valor
de params[:uri_aux].
Muchas gracias por toda la ayuda prestada.
La cuestion con respecto a esto es que user y projects estan
relacionados de dos formas distintas. Un usuario puede estar adscrito a
uno o varios proyectos y puede ser jefe de proyecto de uno o varios
proyectos. Entonces:
user.projects => devuelve los proyectos en los que user es jefe de
proyecto
user.user_projects.collect{|x|Project.find(x.project_id)} => devuelve
los proyectos a los que esta adscrito el usuario
f.
logger.debug( “variable @uri 1: #{params[:uri_aux]}” ) => /projects/1
Si le he hecho la asignacion @uri = params[:uri_aux], ¿como es que no
muestran el mismo valor?
He probado el hacer @uri = params[:uri_aux].to_s, pero lo mismo
que antes, nada.
La solución “rápida” serÃa utilizar params[:uri_aux] en el redirect_to
en vez de @uri, pero aún te queda saber porque @uri desaparece.
user.projects => devuelve los proyectos en los que user es jefe de
proyecto
user.user_projects.collect{|x|Project.find(x.project_id)} => devuelve
los proyectos a los que esta adscrito el usuario
Entonces jurarÃa que mi segunda propuesta funcionarÃa como tu
pretendes, y no cargando tanto ni al servidor de bases de datos ni al
servidor de aplicaciones.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.