文档: http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields
清楚地说明:
query = Client.select(:name).distinct
# => Returns unique names
然而,当我在我的控制器中尝试时,我收到以下错误:
undefined method `distinct' for #<ActiveRecord::Relation:0xb2f6f2cc>
要说清楚,我想要不同的名字,比如[&#39; George&#39;&#39; Brandon&#39;],而不是客户的实际记录。有什么东西我不见了吗?
答案 0 :(得分:37)
为rails 4添加了.distinct
选项,这是最新指南所指的内容。
如果您仍在轨道2上,则需要使用:
Client.select('distinct(name)')
如果您使用的是Rails 3,则需要使用:
Client.select(:name).uniq
如果查看等效的section of the rails 3 guide,您可以看到两个版本之间的区别。
答案 1 :(得分:3)
这适用于Rails 2(我知道很老的轨道!),3和4。
Client.select('distinct(name)')
这实际上将使用SQL select distinct语句
SELECT distinct name FROM clients
答案 2 :(得分:1)
有一些方法:
滑轨方式:
Model.select(:name).distinct
半轨方式
Model.select("DISTINCT ON(models.name) models.*")
第二个记录使您可以选择第一个按名称唯一记录,但在整个过程中,不仅是名称。
答案 3 :(得分:0)
如果您不希望返回ActiveRecord :: Relations,只需将名称数组作为字符串,则使用:
Client.distinct.pluck(:name)
获取有序的结果集:
Client.order(:name).distinct.pluck(:name)