Ruby on rails Rails:获取特定数量的随机记录
因此,我的应用程序中有属于收藏的照片。我想能够显示13张照片从一个特定的收集在一个页面上 我试过这个:Ruby on rails Rails:获取特定数量的随机记录,ruby-on-rails,ruby-on-rails-3,activerecord,random,limit,Ruby On Rails,Ruby On Rails 3,Activerecord,Random,Limit,因此,我的应用程序中有属于收藏的照片。我想能够显示13张照片从一个特定的收集在一个页面上 我试过这个: c = Collection.first @photos = c.photos.offset(rand(c.photos.count)).limit(13) 这有点管用。问题是,如果收集的照片不超过13张,那么它不一定会返回13张照片。我需要确切地得到13张照片 FWIW在我的应用程序中,集合仅由管理员/mods创建,因此我们可以强制执行集合中的照片数不得少于13张。我需要的是能够开始随机选
c = Collection.first
@photos = c.photos.offset(rand(c.photos.count)).limit(13)
这有点管用。问题是,如果收集的照片不超过13张,那么它不一定会返回13张照片。我需要确切地得到13张照片
FWIW在我的应用程序中,集合仅由管理员/mods创建,因此我们可以强制执行集合中的照片数不得少于13张。我需要的是能够开始随机选择超过13张照片
我怎样才能做到这一点呢?只要在sql中对它们进行随机排序,然后取前13个。 我们也要这样做:
您可以首先选择13个随机关联的照片ID,然后执行数据库查询以获取它们:
c = Collection.first
random_ids = c.photo_ids.sort_by { rand }.slice(0, 13)
@photos = Photo.where(:id => random_ids)
这里有一个快速的解决方案。。目前使用它的记录超过150万条,性能良好。最好的解决方案是缓存一个或多个随机记录集,然后使用后台工作程序以所需的时间间隔刷新它们 创建了
随机记录\u helper.rb
文件:
module RandomRecordsHelper
def random_user_ids(n)
user_ids = []
user_count = User.count
n.times{user_ids << rand(1..user_count)}
return user_ids
end
这在SQlite和PostgreSQL中有效吗?我对SQL不是很在行,但由于SQL的不同,我的开发环境和生产环境在过去有过一些问题。您可以随时尝试找出答案。我很确定
RAND()
在大多数SQL实现中都能工作。但要小心,因为它效率极低,而且在较大的数据集上执行所需的时间远远超过需要的时间。POSTGRES和SQLite3使用“RANDOM()”。这是特定于数据库的。这显然非常慢。你的评论说“最多13张照片”,这会返回13张照片吗?如果它返回的照片少于13张,我就不能使用它。如果收藏的照片ID少于13张,它就不能返回13张照片。否则,是的。
module RandomRecordsHelper
def random_user_ids(n)
user_ids = []
user_count = User.count
n.times{user_ids << rand(1..user_count)}
return user_ids
end
@users = User.where(id: random_user_ids(10))