Forum: Rails-ES find ":second" ?

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.
E91518f050cb6081186ff461950099e0?d=identicon&s=25 Luis Villegas (Guest)
on 2007-05-22 16:30
(Received via mailing list)
Buenas, me surge una duda:

Tengo una tabla que guarda los accesos a mi aplicación tal que así:

AUDITORIA:

id - login - created_at

1 -    luis -    22/05/07 13:35
2 -    luis -    22/05/07 13:38
3 -    luis -    22/05/07 13:40
4 -    luis -    22/05/07 13:45


Lo que hace es guardar cada acceso correcto que se hace a la aplicación.

Quiero que muestre el típico mensajito de "Tu último acceso fue el
22/05/07
a las 13:40" una vez que el usuario haga el login. Pero claro, la fecha
que
tendría que enseñar es la del registro on id 3.


Entonces, ¿hay alguna forma de sacar sólo un registro de la base de
datos,
pero que sea el 2º de los que yo quiero sin tener que ser tan retorcido
como
ésto?

(Auditoria.find :all, :order => "created_at DESC", :limit =>
2,:conditions
=> ["login = ? ",self.login])[1]

Muchas gracias
51b840b74eacc1c32e31bfe412d542af?d=identicon&s=25 Sebastian Delmont (sdelmont)
on 2007-05-22 16:32
(Received via mailing list)
Auditoria.find :all, :order => "created_at DESC", :offset =>
1, :limit => 1, ...

Y como te parece un poco retorcido (y estoy de acuerdo con eso), lo
mejor que puedes hacer es algo como:

class Auditoria
   def self.find_second
     ...
   end
end

Asi, lo retorcido queda escondido en un solo lugar, y el resto de tu
codigo se vera limpio, reluciente, y en particular, facilmente legible.
12b49e0819d5eb21c685403e9fc7f93a?d=identicon&s=25 César Duque (Guest)
on 2007-05-22 16:52
(Received via mailing list)
> 4 -    luis -    22/05/07 13:45
>
>
> Lo que hace es guardar cada acceso correcto que se hace a la aplicación.
>
> Quiero que muestre el típico mensajito de "Tu último acceso fue el
> 22/05/07 a las 13:40" una vez que el usuario haga el login. Pero claro,
> la fecha que tendría que enseñar es la del registro on id 3.

> Entonces, ¿hay alguna forma de sacar sólo un registro de la base de datos,
> pero que sea el 2º de los que yo quiero sin tener que ser tan retorcido
> como ésto?

> (Auditoria.find :all, :order => "created_at DESC", :limit => 2,:conditions
=> ["login = ? ", self.login])[1]

Si hicieses una relacion has_many (algo asi):

# #{RAILS_ROOT}/app/models/user.rb

class User < ActiveRecord::Base
  has_many :logins, :order => 'created_at DESC'
end

# #{RAILS_ROOT}/app/models/login.rb

class Login < ActiveRecord::Base
  belongs_to :user
end

Podrías hacer esto otro

a = User.find(condiciones)
a.logins[1]
E91518f050cb6081186ff461950099e0?d=identicon&s=25 Luis Villegas (Guest)
on 2007-05-22 16:55
(Received via mailing list)
Muy bien, muchas gracias a los dos.

La relación que me dices, César ya la tenía, pero lo que quería evitarme
era
la consulta a base de datos de varios registros, por temas de
rendimiento y
tal.

En cuanto a lo que me dices, Sebastián, de meterlo en el modelo, así lo
tenía. Cosas que se aprenden en la lista ;)

Muchas gracias de nuevo
This topic is locked and can not be replied to.