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

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

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


当前回答

用sql收集uniq列的另一种方法:

Model.group(:rating).pluck(:rating)

其他回答

有些答案没有考虑到OP需要一个值数组

如果您的Model有数千条记录,其他答案就不能很好地工作

也就是说,我认为一个很好的答案是:

    Model.uniq.select(:ratings).map(&:ratings)
    => "SELECT DISTINCT ratings FROM `models` " 

因为,首先生成一个Model数组(由于选择而减小了大小),然后提取那些所选模型的唯一属性(评级)

Model.select(:rating).uniq

从rails 3.2开始,这段代码就像“DISTINCT”一样工作(而不是Array#uniq)

用sql收集uniq列的另一种方法:

Model.group(:rating).pluck(:rating)
Model.select(:rating).distinct
Model.pluck("DISTINCT column_name")