如何从表格的列中获取唯一值?例如,我有此产品表:
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%>
如何从表格的列中获取唯一值?例如,我有此产品表:
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%>
Answers:
另外两种方式:
Product.select(:category).map(&:category).uniq # Ruby does the work
Product.uniq.pluck(:category) # DB does the work (superior)
对于Rails> = 5.1,请使用:
Product.distinct.pluck(:category) # DB does the work (superior)
...因为Relation#uniq
已弃用。
User.uniq.pluck(:source)
产生,SELECT DISTINCT "users"."source" FROM "users"
所以我认为它不会将所有记录加载到ruby数组中。
Products.distinct.pluck(:category)
我认为您可以这样做:
<% Products.select("DISTINCT(CATEGORY)").each do |p| %>
<%= p.category %>
<% end %>
资料来源:http : //guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields
试试看(在rails控制台中)
Product.group(:category)
Product.group(:category).each { |p| p.name }
对于postgres
<% Product.select("DISTINCT ON (category) *").each do |category|
<%= category %>
<%= name %>
<% end %>
更好
<% Product.select(%(DISTINCT ON (category) "#{Product.table_name}".*)).each do |category|
<%= category %>
<%= name %>
<% end %>
因为这样做可能会返回错误的列joins
(例如,id
从联接表返回列,但不能products
)