如何获得主动logging的最后N个logging?
用:limit在查询中,我会得到第N个logging。 获得最后N个logging的最简单方法是什么? 
像这样的活动logging查询,我想会得到你想要的('Something'是模型名称):
 Something.find(:all, :order => "id desc", :limit => 5).reverse 
编辑 :正如在评论中指出的,另一种方式:
 result = Something.find(:all, :order => "id desc", :limit => 5) while !result.empty? puts result.pop end 
这是Rails 3的方式
 SomeModel.last(5) # last 5 records in ascending order SomeModel.last(5).reverse # last 5 records in descending order 
 在轨道3.1中做的新方法是SomeModel.limit(5).order('id desc') 
解决scheme在这里:
 SomeModel.last(5).reverse 
 由于rails是懒惰的,它最终将用SQL打到数据库,如:“SELECT table 。* FROM table ORDER BY table。id DESC LIMIT 5”。 
对于Rails 4及以上版本:
你可以尝试这样的事情如果你想第一个最老的条目
 YourModel.order(id: :asc).limit(5).each do |d| 
你可以尝试这样的事情,如果你想要最后的最新条目 ..
 YourModel.order(id: :desc).limit(5).each do |d| 
如果您需要对结果进行sorting,请使用:
 Model.order('name desc').limit(n) # n= number 
如果你不需要任何订购,只需要保存在表中的logging,然后使用:
 Model.last(n) # n= any number 
 在我的rails (rails 4.2)项目中,我使用 
 Model.last(10) # get the last 10 record order by id 
它的工作。
对于Rails 5(可能是Rails 4)
坏:
 Something.last(5) 
因为:
 Something.last(5).class => Array 
所以:
 Something.last(50000).count 
可能会炸毁你的记忆或永远。
好办法:
 Something.limit(5).order('id desc') 
因为:
 Something.limit(5).order('id desc').class => Image::ActiveRecord_Relation Something.limit(5).order('id desc').to_sql => "SELECT \"somethings\".* FROM \"somethings\" ORDER BY id desc LIMIT 5" 
 后者是一个未被评估的范围。 您可以链接它,或通过.to_a将其转换为数组。 所以: 
 Something.limit(50000).order('id desc').count 
…需要一秒钟。
我发现这个查询比使用我喜欢的“pluck”方法更好/更快:
 Challenge.limit(5).order('id desc') 
这给出了一个ActiveRecord作为输出; 所以你可以像这样使用.pluck:
 Challenge.limit(5).order('id desc').pluck(:id) 
当使用最佳的SQL代码时,它可以快速地将ID作为一个数组。
你试一试:
 Model.all.order("id asc").limit(5) 
如果您的模型中有一个默认范围,在Rails 3中指定了升序,那么您需要使用reorder而不是上面的Arthur Neves所指定的顺序:
 Something.limit(5).reorder('id desc') 
要么
 Something.reorder('id desc').limit(5) 
 假设N = 5,你的模型是Message ,你可以这样做: 
 Message.order(id: :asc).from(Message.all.order(id: :desc).limit(5), :messages) 
看看sql:
 SELECT "messages".* FROM ( SELECT "messages".* FROM "messages" ORDER BY "messages"."created_at" DESC LIMIT 5 ) messages ORDER BY "messages"."created_at" ASC 
关键是子select。 首先,我们需要定义我们想要的最后的消息,然后我们必须按照升序来sorting。
将一个:order参数添加到查询中