すでに機能する解決策がありますが、なぜこれが機能しないのかを本当に知りたいです。
ratings = Model.select(:rating).uniq
ratings.each { |r| puts r.rating }
選択はしますが、一意の値は出力せず、重複値を含むすべての値を出力します。ドキュメントに記載されています: http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields
ベストアンサー1
Model.select(:rating)
この結果はModel
オブジェクトのコレクションです。単純な評価ではありません。uniq
の観点から見ると、それらは完全に異なります。次のように使用できます。
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']