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)
只需在sql中随机排序,然后取第13个.所以:
c.photos.order("RAND()").limit(13)
Run Code Online (Sandbox Code Playgroud)