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