在Rails 3中找到最新的记录

Ell*_*iot 55 ruby ruby-on-rails ruby-on-rails-3

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

谢谢

埃利奥特

Dyl*_*kow 121

给定Post模型,你可以做到 @post = Post.order("created_at").last

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

  • 如果使用此方法,请务必索引created_at字段. (11认同)

jem*_*ger 21

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

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

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

MyModel.last(:order => "id asc", :limit => 1)
Run Code Online (Sandbox Code Playgroud)

要么

MyModel.first(:order => "id desc", :limit => 1)
Run Code Online (Sandbox Code Playgroud)

  • `@post = Post.order("created_at").last`实际上做的是正确的.控制台输出类似于"SELECT"帖子".*FROM"帖子"ORDER BY"帖子"."created_at"DESC LIMIT 1` (8认同)