software rails official new and ruby-on-rails ruby ruby-on-rails-3

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).