在Rails 3中找到最新的记录

时间:2011-02-02 03:33:23

标签: ruby-on-rails ruby ruby-on-rails-3

我想知道是否有办法在rails 3中的表中找到最新记录?

由于

埃利奥特

5 个答案:

答案 0 :(得分:116)

鉴于Post模型,您可以@post = Post.order("created_at").last

(我之所以不做@post = Post.last的原因是因为它始终默认按主键排序(通常是id)。大多数时候这很好,但我是确定存在可能导致问题的情况(例如,在记录上设置自定义ID,影响主键排序/自动编号的数据库更改等)。按created_at时间戳排序可确保您真正获得最新记录)。

答案 1 :(得分:21)

虽然dmarkow的答案在技术上是正确的,但您需要在created_at上创建一个索引,否则随着数据库的增长而冒着越来越慢的查询风险。

如果您知道您的“id”列是自动增量主键(可能是它),那么只需使用它,因为它是定义的索引。

此外,除非AREL被优化为仅在find(:last)中选择一条记录,否则您可能会选择所有记录,然后使用“last()”方法返回最后一条记录。更有效的是将结果限制为一个:

MyModel.last(:order => "id asc", :limit => 1)

MyModel.first(:order => "id desc", :limit => 1)

答案 2 :(得分:2)

是的,你可以使用方法.last

因此,如果您的模型名为Post,那么:

>> Post.last
=> #<Post ...>

答案 3 :(得分:2)

在足够高流量的表格上使用created_at可能会遇到歧义问题。

例如。尝试:

INSERT INTO table (created_at) VALUES ( NOW() );
INSERT INTO table (created_at) VALUES ( NOW() );

..有可能拥有相同的created_at,只有1秒的分辨率。排序会以特定的顺序返回它们。

你可能最好存储微量时间值并对其进行排序。

答案 4 :(得分:1)

尝试使用名为ModelName的模型:

record = ModelName.last