27

文档: 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>

需要明确的是,我想要不同的名称,例如 ['George', 'Brandon'],而不是客户的实际记录。有什么我想念的吗?

4

4 回答 4

45

.distinct选项是为最新指南所指的 rails 4 添加的。

导轨 2

如果您仍在 rails 2 上,您将需要使用:

Client.select('distinct(name)')

导轨 3

如果您使用的是 Rails 3,则需要使用:

Client.select(:name).uniq

如果您查看rails 3 指南的等效部分,您可以看到两个版本之间的差异。

于 2013-08-01T21:01:05.520 回答
10

有一些方法:

  1. 导轨方式:

    Model.select(:name).distinct
    
  2. 半轨方式

    Model.select("DISTINCT ON(models.name) models.*")
    

    第二个允许您选择按名称唯一的第一条记录,但总的来说,不仅仅是名称。

于 2019-07-01T15:16:53.693 回答
7

如果您不希望 ActiveRecord::Relations 返回,只是一个名称数组作为字符串,然后使用:

Client.distinct.pluck(:name)

要获得有序的结果集:

Client.order(:name).distinct.pluck(:name)
于 2016-05-16T07:34:39.587 回答
5

这适用于 Rails 2(我知道很老的 rails!)、3 和 4。

Client.select('distinct(name)')

这实际上将使用 SQL select distinct 语句

SELECT distinct name FROM clients

于 2016-02-18T13:17:23.013 回答