我想知道是否有办法在rails 3中的表中找到最新记录?
由于
埃利奥特
答案 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