web-dev-qa-db-fra.com

Ruby-on-Rails: Sélection de valeurs distinctes du modèle

Les documents: http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields

Indiquez clairement que:

query = Client.select(:name).distinct
# => Returns unique names

Cependant, lorsque j'essaye cela dans mon contrôleur, j'obtiens l'erreur suivante:

undefined method `distinct' for #<ActiveRecord::Relation:0xb2f6f2cc>

Pour être clair, je veux les noms distincts, comme ['George', 'Brandon'], pas les enregistrements réels des clients. Y a-t-il quelque chose qui me manque?

16
Bryan Wolfford

L'option .distinct a été ajoutée pour Rails 4, ce à quoi les derniers guides font référence. Si vous êtes toujours sur Rails 3, vous devrez utiliser:

Client.select(:name).uniq

Si vous regardez la section équivalente du guide Rails 3 , vous pouvez voir la différence entre les deux versions.

37
Shadwell

Cela fonctionnera pour les rails 3 et 4.

Client.select('distinct(name)')

Cela utilisera réellement l'instruction SQL select distinct

SELECT distinct name FROM clients

3
Santhosh

Si vous ne voulez pas que ActiveRecord :: Relations soit renvoyé, utilisez uniquement un tableau de noms sous forme de chaînes, puis utilisez:

Client.distinct.pluck(:name)

Pour obtenir un ensemble de résultats ordonné:

Client.order(:name).distinct.pluck(:name)
0
David Aldridge