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%>
Zwei weitere Möglichkeiten:
Products.select(:category).map(&:category).uniq
Products.uniq.pluck(:category)
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
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"
Versuchen Sie dies (in der Rails-Konsole)
Product.group(:category)
Product.group(:category).each { |p| p.name }
Ich schlage vor, Products.all.distinct.pluck(:category)
zu verwenden, da uniq
seit Rails 5 veraltet ist und auf Rails 5.1 entfernt wird
Für Postgres
<% Product.select("DISTINCT ON (category) *").each do |category|
<%= category %>
<%= name %>
<% end %>
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 %>