我已经有了一个可行的解决方案,但我真的很想知道为什么这不起作用:
ratings = Model.select(:rating).uniq ratings.each { |r| puts r.rating }
它选择但不打印唯一值,它打印所有值,包括重复值。它在文档中:http: //guides.rubyonrails.org/active_record_querying.html#selecting-specific- fields
Model.select(:rating)
其结果是Model对象的集合。不是普通的评级。而且从uniq‘s 的角度来看,它们是完全不同的。你可以使用这个:
Model
uniq
Model.select(:rating).map(&:rating).uniq
或者这个(最有效的):
Model.uniq.pluck(:rating)
Model.distinct.pluck(:rating)
显然,从 rails 5.0.0.1 开始,它只适用于“顶级”查询,就像上面一样。不适用于集合代理(例如,“has_many”关系)。
Address.distinct.pluck(:city) # => ['Moscow'] user.addresses.distinct.pluck(:city) # => ['Moscow', 'Moscow', 'Moscow']
在这种情况下,查询后去重
user.addresses.pluck(:city).uniq # => ['Moscow']