Come posso ottenere valori univoci dalla colonna nella tabella? Ad esempio, ho questa tabella Prodotti:
ID NAME CATEGORY 1 name1 1st_cat 2 name2 2nd_cat 3 name3 1st_cat
Qui voglio ottenere solo 2 valori – 1st_cat e 2nd_cat:
Altri due modi:
Products.select(:category).map(&:category).uniq Products.uniq.pluck(:category)
Penso che tu possa fare questo:
<% Products.select("DISTINCT(CATEGORY)").each do |p| %> <%= p.category %> <% end %>
Fonte: http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields
Questo fa tutto il lavoro nel server di database. Il risultato è un semplice array.
<% Product.distinct(:category).pluck(:category).each do |category| <%= category %> <% end %>
Rails genererà SQL che funziona su qualsiasi database (Postgres, MySQL, ecc.).
SELECT DISTINCT "products"."category" FROM "products"
Prova questo (nella console delle guide)
Product.group(:category) Product.group(:category).each { |p| p.name }
Suggerisco di usare Products.all.distinct.pluck(:category)
perché uniq
è stato deprecato dai binari 5 e sarà rimosso su binari 5.1
Necessario per ottenere un output univoco e stava provando il metodo ‘uniq’ senza successo. Ho provato diverse soluzioni pubblicate qui senza successo. Sto usando devise che mi dà accesso al metodo current_user
e che lavora con due tabelle, una delle quali è un join (un elemento has_many: things).
Questa soluzione alla fine ha funzionato per me:
@current_user.things.select(:item_fk).distinct.each do |thing| <%= thing.item.attribute %> <% end %>
Per i postgres
<% Product.select("DISTINCT ON (category) *").each do |category| <%= category %> <%= name %> <% end %>