数组/ ActiveRecord关系中的3个不同的shuffle

时间:2017-05-28 09:38:14

标签: ruby-on-rails activerecord

为了举例说明我有15个用户:

  • membertype_id = 2(5个用户称为a,b,c,d,e)
  • membertype_id = 3(5个用户称为f,g,h,i,j)
  • membertype_id = 4(5个用户称为k,l,m,n,o)

我通常使用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。

1 个答案:

答案 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)