我试着从属于我的用户的汽车中选择5个不同的品牌。我目前的尝试如下(没有随机选择的方法)。
@range = @user.cars.select('DISTINCT brand_id').limit(5)我如何随机选择这五个不同的品牌?非常感谢。
发布于 2010-10-22 17:54:09
虽然不是很优雅,但我可能会选择你所有不同的品牌,然后随机挑选5个。在这种情况下,我希望您的品牌列表不是很大,因此初始查询应该不会太昂贵。
brands = @user.cars.select('DISTINCT brand_id')
selection = 5.times.map{ Random.new.rand(0..brands.size) } # Random requires Ruby 1.9.2+
@range = []
selection.each { |rec| @range << brands[rec] }这是未经测试的代码,所以如果我误导了,很抱歉。
发布于 2011-07-27 22:14:45
问题中给出的代码选择了属于一个特定用户的五个汽车品牌。这是一个非常幸运的用户。
如果我们假设你试图从至少一个用户拥有的所有汽车中随机选择五个品牌,我认为你想要这样的东西:
Car.select("DISTINCT cars.brand_id").order("RANDOM()").joins(:user).limit(5)只要Car与用户有belong_to关系,就应该可以工作。
如果您真的想将范围限制为只有一个用户的汽车,那么您需要这样的东西:
@user.cars.select("DISTINCT cars.brand_id").order("RANDOM()").limit(5)无论如何,在mysql中,您需要"order(RAND())“而不是"order(RANDOM())”。
发布于 2012-05-02 02:14:54
这将帮助您挑选不同的记录
@range = @user.cars.select('brand_id').uniq.limit(5)https://stackoverflow.com/questions/3994766
复制相似问题