web-dev-qa-db-fra.com

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

Comment puis-je obtenir des valeurs uniques de la colonne dans la table? Par exemple, j'ai cette table Products:

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%>
59
Oleg Pasko

Deux autres façons:

Products.select(:category).map(&:category).uniq

Products.uniq.pluck(:category)
130
user664833

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

25
ThatOtherPerson

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

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

Rails générera du SQL qui fonctionne sur toutes les bases de données (Postgres, MySQL, etc.).

SELECT DISTINCT "products"."category" FROM "products"
9
jelder

Essayez ceci (dans la console Rails)

Product.group(:category)

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

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

5
Fabio Ros

Pour postgres

<% Product.select("DISTINCT ON (category) *").each do |category|
    <%= category %>
    <%= name %>
<% end %>
0
srghma

Nécessaire pour obtenir une sortie unique et essayait sans succès la méthode 'uniq'. J'ai essayé plusieurs solutions postées ici sans succès. J'utilise un schéma qui me donne accès à la méthode current_user et travaille avec deux tables, l'une étant une jointure (un élément has_many: choses).

Cette solution a finalement fonctionné pour moi:

@current_user.things.select(:item_fk).distinct.each do |thing|
 <%= thing.item.attribute %>
<% end %>
0
Phil_ish