wake-up-neo.com

Rails: Wie bekomme ich eindeutige Werte aus der Spalte

Wie kann ich aus der Spalte in der Tabelle eindeutige Werte erhalten? Zum Beispiel habe ich diese Produkttabelle:

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

Hier möchte ich nur zwei Werte erhalten - 1st_cat und 2nd_cat:

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

Zwei weitere Möglichkeiten:

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

Products.uniq.pluck(:category)
130
user664833

Ich denke du kannst das machen:

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

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

25
ThatOtherPerson

Dies erledigt die gesamte Arbeit auf dem Datenbankserver. Das Ergebnis ist ein einfaches Array.

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

Rails generiert SQL, das in jeder Datenbank (Postgres, MySQL usw.) funktioniert.

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

Versuchen Sie dies (in der Rails-Konsole)

Product.group(:category)

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

Ich schlage vor, Products.all.distinct.pluck(:category) zu verwenden, da uniq seit Rails 5 veraltet ist und auf Rails 5.1 entfernt wird

5
Fabio Ros

Für Postgres

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

Erforderte eine eindeutige Ausgabe und versuchte die 'uniq'-Methode erfolglos. Versuchte mehrere Lösungen hier erfolglos. Ich verwende devise, wodurch ich auf die current_user-Methode zugreifen kann und mit zwei Tabellen arbeite, von denen eine eine Verknüpfung ist (ein Element has_many: things).

Diese Lösung hat letztendlich für mich funktioniert:

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