Ruby-on-Rails:从模型中选择不同的值

时间:2013-08-01 20:47:41

标签: ruby-on-rails rails-activerecord

文档: 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;],而不是客户的实际记录。有什么东西我不见了吗?

4 个答案:

答案 0 :(得分:37)

为rails 4添加了.distinct选项,这是最新指南所指的内容。

Rails 2

如果您仍在轨道2上,则需要使用:

Client.select('distinct(name)')

Rails 3

如果您使用的是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)

有一些方法:

  1. 滑轨方式:

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

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

    第二个记录使您可以选择第一个按名称唯一记录,但在整个过程中,不仅是名称。

答案 3 :(得分:0)

如果您不希望返回ActiveRecord :: Relations,只需将名称数组作为字符串,则使用:

Client.distinct.pluck(:name)

获取有序的结果集:

Client.order(:name).distinct.pluck(:name)