ruby on rails - official - Encuentra el registro más nuevo en Rails 3
ruby on rails website (5)
Pruebe, para un modelo llamado ModelName
:
record = ModelName.last
Me preguntaba si hay alguna manera de encontrar el registro más nuevo en una tabla en rails3.
Gracias
Elliot
Sí, puedes usar el método .last
Entonces, si su modelo se llama Post, entonces:
>> Post.last
=> #<Post ...>
Si bien la respuesta de dmarkow es técnicamente correcta, deberá crear un índice en created_at o arriesgarse a una consulta cada vez más lenta a medida que su base de datos crezca.
Si sabe que su columna "id" es una clave primaria de incremento automático (lo que probablemente sea), simplemente úselo ya que es un índice por definición.
Además, a menos que AREL esté optimizado para seleccionar solo un registro en un find (: last), se corre el riesgo de seleccionar TODOS los registros y luego devolver el último utilizando el método "last ()". Más eficiente es limitar los resultados a uno:
MyModel.last(:order => "id asc", :limit => 1)
o
MyModel.first(:order => "id desc", :limit => 1)
puede encontrarse con problemas de ambigüedad usando created_at
en una tabla de tráfico lo suficientemente alta.
p.ej. tratar:
INSERT INTO table (created_at) VALUES ( NOW() );
INSERT INTO table (created_at) VALUES ( NOW() );
..tiene el potencial de tener el mismo created_at
, que solo tiene 1 segundo de resolución. un género los devolvería sin un orden particular.
es mejor que guardes un valor de microtime y lo clasifiques.
Dado un modelo de publicación, podría hacer @post = Post.order("created_at").last
(La razón por la que no acabo de hacer un @post = Post.last
es porque siempre se @post = Post.last
forma predeterminada por tu clave principal (generalmente id
). La mayoría de las veces esto está bien, pero estoy seguro de que hay un escenario donde eso podría causar problemas (por ejemplo, establecer ID personalizados en los registros, cambios en la base de datos que afectan la secuencia principal de claves / autonumeración, etc.). Ordenar por la created_at
tiempo created_at
asegura que realmente está obteniendo el registro más reciente).