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 ガイドの同等のセクションを見ると、2 つのバージョンの違いがわかります。

于 2013-08-01T21:01:05.520 に答える
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 に答える