Rails:获取特定数量的随机记录

And*_*rew 7 random activerecord ruby-on-rails limit ruby-on-rails-3

所以,我的应用程序有照片属于集合.我希望能够在页面上显示来自特定集合的13张照片.

我试过这个:

c = Collection.first
@photos = c.photos.offset(rand(c.photos.count)).limit(13)
Run Code Online (Sandbox Code Playgroud)

这有点工作.问题是,如果该系列没有超过13张照片,那么它不一定会返回13张照片.我需要专门准确地拍摄13张照片.

FWIW对于我的应用程序,集合只由admins/mods创建,因此我们可以强制执行任何集合不会少于13张照片.我需要的是能够开始一次超过13个随机选择照片.

我怎么能这样做?

Kev*_* Qi 13

您可以先选择13个随机关联的照片ID,然后进行数据库查询以获取它们:

c = Collection.first
random_ids = c.photo_ids.sort_by { rand }.slice(0, 13)
@photos = Photo.where(:id => random_ids)
Run Code Online (Sandbox Code Playgroud)


Oli*_*ves 6

只需在sql中随机排序,然后取第13个.所以:

c.photos.order("RAND()").limit(13)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,因为它的效率非常低,而且在较大的数据集上运行所需的时间比执行所需的时间长得多. (4认同)
  • POSTGRES和SQLite3使用'RANDOM()'.这是特定于数据库的. (4认同)