我正在运行Ruby on Rails 3.2.2,我想随机化ActiveRecord::Relation
的数组元素位置。
我该怎么做?
答案 0 :(得分:21)
您可以随时将.order('random()')
添加到关系:
ar = Model.where(...).where(...).order('random()')
您甚至可以将其添加为范围:
class Model < ActiveRecord::Base
scope :randomize, order('random()')
end
有几点需要注意:
random()
,MySQL使用rand()
,我不确定其他数据库。ORDER BY random()
在数据库中可能非常昂贵,因此您不希望使用此项,除非您的WHERE子句(即.where
调用)将限制您将应用的结果集的大小ORDER BY random()
to。.limit
,因此x.limit(n).order('random()')
会将ORDER BY应用于所有x
,然后应用limit(n)
排序后。这是(2)中的警告来自。答案 1 :(得分:1)
鉴于Store.items
是has_many
关系,您可以
a = store.items.all.shuffle
答案 2 :(得分:0)
Client.first.users.sample
怎么办?