85 votes

Rails : comment puis-je obtenir des valeurs uniques de la colonne

Comment puis-je obtenir des valeurs uniques à partir de la colonne du tableau ? Par exemple, j'ai cette table Produits :

 ID NAME CATEGORY
1 name1 1st_cat
2 name2 2nd_cat
3 name3 1st_cat

Ici, je veux obtenir seulement 2 valeurs - 1st_cat et 2nd_cat :

 <%Products.each do |p|%>
<%=p.category%>
<%end%>

193voto

user664833 Points 4597

Deux autres manières :

 Product.select(:category).map(&:category).uniq # Ruby does the work

Product.uniq.pluck(:category) # DB does the work (superior)

Pour les rails >= 5.1, utilisez :

 Product.distinct.pluck(:category) # DB does the work (superior)

...parce que Relation#uniq était obsolète .

27voto

ThatOtherPerson Points 698

Je pense que tu peux faire ça :

 <% Products.select("DISTINCT(CATEGORY)").each do |p| %>
<%= p.category %>
<% end %>

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

12voto

jelder Points 93

Cela fait tout le travail dans le serveur de base de données. Le résultat est un simple tableau.

 <% Product.distinct(:category).pluck(:category).each do |category|
    <%= category %>
<% end %>

Rails va générer du SQL qui fonctionne sur n'importe quelle base de données (Postgres, MySQL, etc.).

 SELECT DISTINCT "products"."category" FROM "products"

9voto

Fabio Ros Points 99

Je suggère d'utiliser Products.all.distinct.pluck(:category) car uniq est obsolète depuis les rails 5 et il sera supprimé sur les rails 5.1

6voto

maprihoda Points 5600

Essayez ceci (dans la console des rails)

 Product.group(:category)

Product.group(:category).each { |p| p.name }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X