为了举例说明我有15个用户:
我通常使用User.order(“membertype_id DESC”)对它们进行排序,以使它们运行:
a,b,c,d,e - f,g,h,i,j - k,l,m,n,o
现在我想在3个不同类别中进行随机播放,但仍然保持整个订单来自membertype_id:
例如,它可以按此顺序返回:
d,c,a,b,e - g,f,i,j,h - k,m,n,l,o
或
a,c,e,b,d - f,i,j,h,g - m,k,n,o,l
或
b,d,c,a,e - j,g,h,i,f - k,n,o,l,m
但从不
m,j,k,a,f,e,b,g,d,h,i,o等
我将如何做到这一点?我需要返回一个ActiveRecord_Relation。
答案 0 :(得分:1)
你可以使用postgres random()
magic。
@users = User.order(:membertype_id).order('random()')
或者如果它是mysql的
@users = User.order(:membertype_id).order('RAND()')
编辑:
也有可能在Ruby中执行此操作,但是在此之后您将得到一个数组,而不是ActiveRelation对象
@users = User.
joins(..).
where(..).
shuffle.
sort_by(&:membertype_id)