JtR*_*JtR 156 ruby activerecord ruby-on-rails
随着:limit查询,我会得到前N个记录.获得最后N条记录的最简单方法是什么?
Bon*_*ngs 256
这是Rails 3的方式
SomeModel.last(5) # last 5 records in ascending order
SomeModel.last(5).reverse # last 5 records in descending order
Run Code Online (Sandbox Code Playgroud)
Dan*_*vin 140
像这样的活动记录查询我认为可以得到你想要的东西('Something'是模型名称):
Something.find(:all, :order => "id desc", :limit => 5).reverse
Run Code Online (Sandbox Code Playgroud)
编辑:如评论中所述,另一种方式:
result = Something.find(:all, :order => "id desc", :limit => 5)
while !result.empty?
puts result.pop
end
Run Code Online (Sandbox Code Playgroud)
Art*_*ves 50
在rails 3.1中执行此操作的新方法是 SomeModel.limit(5).order('id desc')
Gag*_*ami 32
对于Rails 4及以上版本:
您可以尝试这样的事情如果您想要第一个最早的条目
YourModel.order(id: :asc).limit(5).each do |d|
Run Code Online (Sandbox Code Playgroud)
如果你想要最新的参赛作品,你可以试试这样的东西.
YourModel.order(id: :desc).limit(5).each do |d|
Run Code Online (Sandbox Code Playgroud)
Ami*_*ana 29
Something.last(5)
Run Code Online (Sandbox Code Playgroud)
因为:
Something.last(5).class
=> Array
Run Code Online (Sandbox Code Playgroud)
所以:
Something.last(50000).count
Run Code Online (Sandbox Code Playgroud)
可能会炸毁你的记忆或永远消失.
Something.limit(5).order('id desc')
Run Code Online (Sandbox Code Playgroud)
因为:
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"
Run Code Online (Sandbox Code Playgroud)
后者是一个未评估的范围.您可以链接它,或通过它将其转换为数组.to_a.所以:
Something.limit(50000).order('id desc').count
Run Code Online (Sandbox Code Playgroud)
......需要一秒钟.
Dev*_*per 24
解决方案在这里:
SomeModel.last(5).reverse
Run Code Online (Sandbox Code Playgroud)
"选择:由于轨道是懒惰的,它最终会与像SQL访问数据库 table*FROM.table ORDER BY table.idDESC LIMIT 5".
| 归档时间: |
|
| 查看次数: |
124128 次 |
| 最近记录: |