在Rails 3中find最新的logging
我想知道是否有办法在rails3的表中find最新的logging?
谢谢
埃利奥特
给定一个Post模型,你可以做@post = Post.order("created_at").last
(我之所以不只是做一个@post = Post.last
是因为它总是默认按你的主键(通常是id
)进行sorting,大多数时间没问题,但我确定有一种情况,可能会导致问题(例如设置logging上的自定义ID,影响主键sorting/自动编号的数据库更改等),通过created_at
时间戳进行sorting可确保您真正获取最新logging)。
虽然dmarkow的答案在技术上是正确的,但您需要在created_at上创build一个索引,否则随着数据库的增长,查询速度会越来越慢。
如果你知道你的“id”列是一个自动递增的主键(它可能是),那么就使用它,因为它是一个定义的索引。
另外,除非AREL被优化为在find(:last)中只select一条logging,否则将冒着select所有logging的风险,然后使用“last()”方法返回最后一条logging。 更高效的是将结果限制为一个:
MyModel.last(:order => "id asc", :limit => 1)
要么
MyModel.first(:order => "id desc", :limit => 1)
是的,你可以使用方法.last
所以如果你的模型叫Post,那么:
>> Post.last => #<Post ...>
您可能会遇到一个模糊性问题使用created_at
在一个足够高的stream量表上。
例如。 尝试:
INSERT INTO table (created_at) VALUES ( NOW() ); INSERT INTO table (created_at) VALUES ( NOW() );
..有可能具有相同的created_at
,只有1秒的分辨率。 一个sorting会返回他们没有特定的顺序。
你可能会更好地存储microtime价值和sorting。
尝试一下名为ModelName
的模型:
record = ModelName.last