Rails:我怎样才能从列中获得唯一的值

我怎样才能从表中的列中获得唯一的值? 例如,我有这个产品表:

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

在这里,我只想得到2个值 – 1st_cat和2nd_cat:

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

还有两种方法:

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

我认为你可以做到这一点:

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

资料来源: http : //guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields

这完成了数据库服务器中的所有工作。 结果是一个简单的数组。

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

Rails将生成适用于任何数据库(Postgres,MySQL等)的SQL。

 SELECT DISTINCT "products"."category" FROM "products" 

试试这个(在rails控制台中)

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

我build议使用Products.all.distinct.pluck(:category)因为uniq已经被弃用,因为rails 5和它将在rails 5.1上被删除

需要得到独特的输出,并试图“uniq”方法失败。 试了几个解决scheme张贴在这里失败。 我使用的devise,使我可以访问current_user方法和使用两个表,一个是联接(一个项目has_many:东西)。

这个解决scheme最终为我工作:

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