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

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

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


当前回答

这也有用。

Model.pluck("DISTINCT rating")

其他回答

这也有用。

Model.pluck("DISTINCT rating")
Model.uniq.pluck(:rating)

# SELECT DISTINCT "models"."rating" FROM "models"

这具有不使用sql字符串和不实例化模型的优点

在我的场景中,我希望根据创建日期对不同的名称进行排序,并应用offset和limit。基本上是ORDER BY和DISTINCT ON的组合

你所需要做的就是在拔拔方法中设置DISTINCT ON,就像下面这样

模型。order("name, created_at DESC").offset(0).limit(10)。pluck("DISTINCT ON (name) name")

这将返回一个不同名称的数组。

如果有人想在蒙古人身上找到同样的东西,那就是

Model.distinct(:rating)

如果你要使用模型。select,那么你可能只使用DISTINCT,因为它只会返回唯一的值。这样更好,因为这意味着它返回更少的行,并且应该比返回一些行然后告诉Rails选择惟一值略快。

Model.select('DISTINCT rating')

当然,前提是您的数据库能够理解DISTINCT关键字,而且大多数数据库都应该理解。