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%>
Deux autres façons:
Products.select(:category).map(&:category).uniq
Products.uniq.pluck(:category)
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
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"
Essayez ceci (dans la console Rails)
Product.group(:category)
Product.group(:category).each { |p| p.name }
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.
Pour postgres
<% Product.select("DISTINCT ON (category) *").each do |category|
<%= category %>
<%= name %>
<% end %>
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 %>