Rails: come posso ottenere valori univoci dalla colonna

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 %>