Forum: Rails-ES Problemas para crear una session

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Juan M. (Guest)
on 2006-12-23 20:08
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
Jaime M. (Guest)
on 2006-12-23 21:30
> 3.  Cuando quiero ver los datos me aparece el siguiente error “Couldn't
> find Profesore without an ID”

Tienes un modelo Profesore ?

---
Jaime Mora R.
Juan M. (Guest)
on 2006-12-24 22:54
Jaime Mora R. wrote:
>> 3.  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
Jaime M. (Guest)
on 2006-12-25 00:48
> 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.
Juan M. (Guest)
on 2006-12-28 02:25
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
Marcelo T. (Guest)
on 2006-12-28 16:55
(Received via mailing list)
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") %>
 <p align="center">Login: <%= text_field("log_in", "log", "size" => 30 )
%></p>
 <p align="center">Passw: <%= password_field("log_in", "password",
"size"
=> 30 ) %></p>
        <p align="center" class="cerrar"><%= 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!
Fernando B. (Guest)
on 2006-12-28 17:26
(Received via mailing list)
Pues casi lo tienes:

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

No es más que un Hash de Hashes
Juan M. (Guest)
on 2006-12-28 22:13
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.
Jaime M. (Guest)
on 2006-12-29 00:51
> 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.
Juan M. (Guest)
on 2007-01-05 18:03
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' %>
  <label for="profesore_created_on">C&eacute;dula:</label>
  <%= text_field 'profesore', 'codigo', 'size' =>11, 'name' =>'codigo'
%><br>

  <label for="profesore_created_on">Primer Nombre:</label>
  <%= text_field 'profesore', 'nombre', 'size' =>20  %><br>

  <%= 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.
Alexander S. (Guest)
on 2007-01-06 20:30
(Received via mailing list)
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.
Juan M. (Guest)
on 2007-01-07 17:31
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
Xavier N. (Guest)
on 2007-01-07 19:49
(Received via mailing list)
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.
Juan M. (Guest)
on 2007-01-09 17: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.
This topic is locked and can not be replied to.