小编典典

Rails:从列中选择唯一值

all

我已经有了一个可行的解决方案,但我真的很想知道为什么这不起作用:

ratings = Model.select(:rating).uniq
ratings.each { |r| puts r.rating }

它选择但不打印唯一值,它打印所有值,包括重复值。它在文档中:http:
//guides.rubyonrails.org/active_record_querying.html#selecting-specific-
fields


阅读 62

收藏
2022-05-13

共1个答案

小编典典

Model.select(:rating)

其结果是Model对象的集合。不是普通的评级。而且从uniq‘s 的角度来看,它们是完全不同的。你可以使用这个:

Model.select(:rating).map(&:rating).uniq

或者这个(最有效的):

Model.uniq.pluck(:rating)

导轨 5+

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']
2022-05-13