Problemas para crear una session


#1

Saludos a la comunidad de RoR la siguiente pregunta es para ver quien me
puede ayudar para crear una session en RoR, tengo una tabla que se llama
usuarios, con los atributos id_usuario(auto increment) , clave, nombe y
email, se que la session es para mantener los datos de un usuario
mientras que se encuentre usando las paginas que están en uso. Lo que
hice en mi controller fue lo siguiente.

def guardar
@usuario = Usuario.new(params[:usuario])
@ usuario.save
@ usuario = session[:usuario _clave] #quiero que se mantenga el
#dato clave ya que con el hago búsquedas de datos
session[:usuario] = @usuario
redirect_to :action=>‘dato’
end

mi metodo para buscar es el siguiente

def ver
@usuario = Usuario.find(session[:usuario _clave])
render_action ‘datos’

luego que consiga los datos que me lo muestre en otrapagina

end

Los errores que tengo son los siguientes.

  1. No se si estoy creando bien la session
  2. No se si se esta guardado el dato clave del usuario
  3. Cuando quiero ver los datos me aparece el siguiente error “Couldn’t
    find Profesore without an ID”

Si alguien me puede ayudar con un ejemplo o orientarme con el manejo de
sessiones en RoR, se lo agradezco de antemano.

Que pasen feliz navidad y Prospero año nuevo
Gracias


#2
  1. Cuando quiero ver los datos me aparece el siguiente error “Couldn’t
    find Profesore without an ID”

Tienes un modelo Profesore ?


Jaime Mora R.


#3

Jaime Mora R. wrote:

  1. Cuando quiero ver los datos me aparece el siguiente error “Couldn’t
    find Profesore without an ID”

Tienes un modelo Profesore ?


Jaime Mora R.

Si amigo tengo el model que se llama profesore.rb, pero el problema es
que no se como asignar valores a una session, para poder trabajr de una
forma profesional, es por eso que pido ayuda, pues se que no es tan
dificil trabajar con session, pero de que se las trae se las trae


#4

Si amigo tengo el model que se llama profesore.rb, pero el problema es
que no se como asignar valores a una session, para poder trabajr de una
forma profesional, es por eso que pido ayuda, pues se que no es tan
dificil trabajar con session, pero de que se las trae se las trae

Rails utiliza el hash session para almacenar nuestros objetos en la
session actual, considera el siguiente código:

def find_profesore
session[:profesore] ||= Profesore.new
end

Si el hash tiene un valor correspondiente al key :profesore, el valor es
retornado inmediatamente, de lo contrario un nuevo objeto profesore es
creado y asignado a la session.

Espero te sirva.

Jaime Mora R.


#5

Jaime Mora R. wrote:

Si amigo tengo el model que se llama profesore.rb, pero el problema es
que no se como asignar valores a una session, para poder trabajr de una
forma profesional, es por eso que pido ayuda, pues se que no es tan
dificil trabajar con session, pero de que se las trae se las trae

Rails utiliza el hash session para almacenar nuestros objetos en la
session actual, considera el siguiente código:

def find_profesore
session[:profesore] ||= Profesore.new
end

Si el hash tiene un valor correspondiente al key :profesore, el valor es
retornado inmediatamente, de lo contrario un nuevo objeto profesore es
creado y asignado a la session.

Espero te sirva.

Jaime Mora R.

Te avisare si funciona pues estos dias de Diciembre no son facil para
trabajar


#6

Hola amigos: espero que hayan tenido unas bonitas fiestas.

Bueno mi duda es con como sacar los valores del hash luego que se usa el
form.

Tengo algo así :

<%= start_form_tag(:controller => “logger”, :action => “login”) %>

Login: <%= text_field("log_in", "log", "size" => 30 ) %>

Passw: <%= password_field("log_in", "password", "size" => 30 ) %>

<%= submit_tag(" Aceptar ") %> <%= end_form_tag %>

y cuando hago click se va al controlador logger en la función login…
bueno no he acabado de entender el asunto de params[:log_in] ese debería
ser el hash del form según entiendo…como puedo obtener los valores que
tienen en el form?..

Saludos!


#7

Juan M. wrote:

Jaime Mora R. wrote:

Si amigo tengo el model que se llama profesore.rb, pero el problema es
que no se como asignar valores a una session, para poder trabajr de una
forma profesional, es por eso que pido ayuda, pues se que no es tan
dificil trabajar con session, pero de que se las trae se las trae

Rails utiliza el hash session para almacenar nuestros objetos en la
session actual, considera el siguiente código:

def find_profesore
session[:profesore] ||= Profesore.new
end

Amigo hice la prueba de
def find_profesore
session[:profesore] ||= Profesore.new
end

y me da el siguiente error.

SyntaxError
app/controllers/apucla_controller.rb:55: parse error, unexpected
tOP_ASGN, expecting kEND
session [:profesore ]||=Profesore.new

No se por que ahora tengo ese error. Estoy tratando de seguir un
ejemplos que conseguí en la web para ver que solución le busco a esto de
las session, pues en realidad necesito de una para mi proyecto.


#8

Juan M. wrote:

y me da el siguiente error.

SyntaxError
app/controllers/apucla_controller.rb:55: parse error, unexpected
tOP_ASGN, expecting kEND
session [:profesore ]||=Profesore.new

Revisa que los “end” corresponda a cada def, if, etc.

Espero te sirva.

Jaime Mora R.


#9

Pues casi lo tienes:

login > params[:log_in][:log]
password > params[:log_in][:password]

No es más que un Hash de Hashes


#10

Quiero crear un session pero me han surgidos varios problemas, explico
tengo un model donde esta mi tabla la cual se llama profesore.

Tengo 2 wiews una de ella es dato y lista, lo que quiero es que cuando
el usuario guarde sus datos en la pagina dato y quiera luego ver sus
datos en lista lo haga sin tener que volver a escribir su código.

Esto es lo que tengo en mi pagina dato.
<%= start_form_tag :action => ‘guardar’ %>
Cédula:
<%= text_field ‘profesore’, ‘codigo’, ‘size’ =>11, ‘name’ =>‘codigo’
%>

Primer Nombre:
<%= text_field ‘profesore’, ‘nombre’, ‘size’ =>20 %>

<%= submit_tag “Guardar” %>
<%= submit_tag “Buscar”,{:type =>‘button’,
:onClick=>“parent.location=’” + url_for( :controller => ‘apucla’,
:action => ‘lista’) + “’”} %>

<%= end_form_tag %>

Y en la pagina lista

   <%= @profesore.codigo %><br>
   <%= @profesore.nombre %><br>

Y en el controller:

class ApuclaController < ApplicationController
scaffold :profesore
def index
render_action ‘dato’
end

def guardar

   cedula=params[:codigo]
   @profesore = Profesore.new(params[:profesore])
   @profesore.codigo = cedula
   @profesore.save
   begin
     @session[:profesore] = cedula
   end
   redirect_to(:action => 'dato')

end
def lista
begin
@profesore = Profesore.find(:first, :conditions => “cedula =
‘#{session[profesore]}’”)
render_action ‘lista’
end
end

end

El problema que tengo es que cuando quiero irme a la pagina lista tengo
un problema de nil, lo que creo es que no se creo la session o que la
variable cedula perdio la informacion que le pase a travez de la pagina
dato, el concepto de session es que puedo navegar en diferentes pagina
manteniendo la información.

Si alguien me ayuda le agradezco.


#11

Alexander S. wrote:

Hola, casualmente ayer en la noche estaba creando mi primer inicio de
sessión y me pude divertir bastante por lo rapido que es crear y
modificar a
mi gusto.

Amigo gracias por tu ayuda pero tengo una pregunta no hay una forma de
hacerlo sin ese gem, es que he leído en algunos libros y no párese tan
difícil el problema es que todavía no le agarro la idea a esto de las
sessiones


#12

Hola, casualmente ayer en la noche estaba creando mi primer inicio de
sessión y me pude divertir bastante por lo rapido que es crear y
modificar a
mi gusto.

  • Primero instale la gema login generator.
  • cree mi aplicación rails demo.
  • una base de datos users con (id, login y password) en tu caso (id,
    login, password, profesor, cedula,…)
  • luego ruby script/generator login inicio
  • y viola!
  • un error cada vez que cambiaba de post pero era la cuestion del
    redirect_to todavia nose que paso con el environment pero le quite el
    default por redirect_to en el controlador y funcionó.
  • Luego algunos puesta a punto sobre la cuestión de seguridad. (Ej:
    asi alguien entra a la pagina de administración no pueda hacer nada a
    menos
    que exista tal sessión), que cool! pude esconder y mostrar botones
    donde
    quisiera con un solo if en la misma linea del layout.
  • Pude comprobar de que podia navegar por toda la web y hasta que no
    le diera logout. no salia de la sessión; obvio.
  • Despues que veas el modelo de user, te será facilisimo agregar las
    demas validaciones y reglas.
  • Despues me puse experimentar con ajax pero me dio sueño y quemas le
    puedo decir.

#13

On Jan 7, 2007, at 4:31 PM, Juan M. wrote:

sessiones
Es normal, es un concepto bastante mal definido y yo la verdad que
hasta que no estudie HTTP y CGI pelado no acabe de entenderlo, porque
los frameworks te lo ponen tan facil que no ves muy bien de que va
todo eso.

Si lees por ahi veras que se explica que trata de capturar la idea de
que “un tipo esta navegando por el website y recojo informacion de
esa navegacion”, pero eso no encaja muy bien porque la navegacion web
se da a ratos, el servidor no sabe cuando ha terminado, y en realidad
a la aplicacion normalmente le da lo mismo si el tio se fue de viaje
y entro en el website desde Egipto dos dias mas tarde. Para colmo se
suele ejemplificar con un carrito de la compra que en mi vida he
visto metido en una sesion.

Pero a la practica la idea es sencilla, a veces uno necesita pasar
informacion de una peticion a otra cuando esta viene del mismo
usuario (esto es inexacto pero ya nos vale). La “sesion” es un lugar
donde se almacena esa informacion, en forma de llaves/valores. Para
identificar que una peticion HTTP viene del mismo tipo que la que se
sirvio hace 300 requests atras se usa una cookie con un session_id,
que en el serivdor se vincula a ese hash que esta guardado con ese id
en algun lugar. Por defecto Rails los guarda en tmp/sessions, pero
tambien sabe guardarlos en base de datos y mas sitios. De todo eso no
has de preocuparte, se encarga Rails automaticamente.

Por ejemplo, en una navegacion que necesita autenticacion uno suele
poner algo en sesion que identifique al usuario. De otro modo entre
peticiones estariamos constantemente pidiendo login y contraseña para
hacer las cosas. Normalmente se pone un user_id en la sesion

en la accion de login

current_user = User.find_by_login_and_password(…)
if current_user
session[:user_id] = current_user.id
else
# pedir de nuevo credenciales
end

Como ves en Rails se asignan cosas a la sesion con una interfaz que
se parece a la de una tabla hash.

Cuando viene una peticion de nuevo Rails recupera la sesion asociada
al session_id que le llega por cookie, y la pone disponible a los
controladores. Uno asi puede preguntar si existe un user_id en esa
sesion

if session[:user_id]
current_user = User.find(session[:user_id])
end

La sesion en general no es necesario usarla para mucho mas, ya que
las cosas en web se suelen hacer persistentes en base de datos (e.g.
el susodicho carrito de la compra). En Rails otro uso comun es pasar
cadenas entre peticiones. Eso es lo que hace flash, mete en sesion la
cadena y Rails se encarga de que dure una sola request (dinamica).

Se entiende mas o menos?

– fxn

P.D.: Use lo del user_id como ejemplo sin muchos detalles, de hecho
uno suele delegar autenticacion a un plugin, y eso mismo lo hace el
plugin.


#14

Por ejemplo, en una navegacion que necesita autenticacion uno suele
poner algo en sesion que identifique al usuario. De otro modo entre
peticiones estariamos constantemente pidiendo login y contraseñ¡ °ara
hacer las cosas. Normalmente se pone un user_id en la sesion

en la accion de login

current_user = User.find_by_login_and_password(…)
if current_user
session[:user_id] = current_user.id
else
# pedir de nuevo credenciales
end

Como ves en Rails se asignan cosas a la sesion con una interfaz que
se parece a la de una tabla hash.

Cuando viene una peticion de nuevo Rails recupera la sesion asociada
al session_id que le llega por cookie, y la pone disponible a los
controladores. Uno asi puede preguntar si existe un user_id en esa
sesion

if session[:user_id]
current_user = User.find(session[:user_id])
end

La sesion en general no es necesario usarla para mucho mas, ya que
las cosas en web se suelen hacer persistentes en base de datos (e.g.
el susodicho carrito de la compra). En Rails otro uso comun es pasar
cadenas entre peticiones. Eso es lo que hace flash, mete en sesion la
cadena y Rails se encarga de que dure una sola request (dinamica).

Se entiende mas o menos?

– fxn

P.D.: Use lo del user_id como ejemplo sin muchos detalles, de hecho
uno suele delegar autenticacion a un plugin, y eso mismo lo hace el
plugin.

Amigo Xavier en verdad me puse a leer bien lo de la session y es verdad
lo que dices pues el concepto no esta bien definido, pero me quedo bien
claro que la sessiones la podemos utilizar para el paso de algunos
valores entre browsers (digo algunos pues la sessiones no aguanta todos
los tipos de valores). Y en verdad yo lo que necesitaba era que una
session se mantuviera mientras que un usuario está viendo sus paginas.
El ejemplo que me mandaste me ayudo mucho y ya pude hacer lo de la
sessiones y el ejemplo lo tengo a la orden de la comunidad de este foro.
Gracias nuevamente
Juan P.