如何从表格中的列中获取唯一值? 例如,我有这个Products表:
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%>
答案 0 :(得分:131)
还有两种方式:
Products.select(:category).map(&:category).uniq
Products.uniq.pluck(:category)
答案 1 :(得分:26)
我认为你可以这样做:
<% Products.select("DISTINCT(CATEGORY)").each do |p| %>
<%= p.category %>
<% end %>
来源:http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields
答案 2 :(得分:9)
这可以完成数据库服务器中的所有工作。结果是一个简单的数组。
<% Product.distinct(:category).pluck(:category).each do |category|
<%= category %>
<% end %>
Rails将生成适用于任何数据库的SQL(Postgres,MySQL等)。
SELECT DISTINCT "products"."category" FROM "products"
答案 3 :(得分:7)
我建议使用Products.all.distinct.pluck(:category)
,因为自导轨5以来uniq
已被弃用,它将在rails 5.1上删除
答案 4 :(得分:6)
试试这个(在rails控制台中)
Product.group(:category)
Product.group(:category).each { |p| p.name }
答案 5 :(得分:2)
对于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
)
答案 6 :(得分:0)
需要获得独特的输出并且正在尝试使用&#39; uniq&#39;方法失败。试过这里发布的几个解决方案失败了。我使用了devise,它允许我访问current_user
方法并使用两个表,一个是连接(一个项目has_many:东西)。
这个解决方案最终对我有用:
@current_user.things.select(:item_fk).distinct.each do |thing|
<%= thing.item.attribute %>
<% end %>
答案 7 :(得分:0)
如果您或任何人想从诸如 products 之类的表中获取两个或多个属性,基于属性的独特特征,只有此解决方案才能帮助您Rails >= 5.1
distinct_products = Product.select("DISTINCT ON (category) *")
# it's an active record relation class.
> distinct_products.class
=> Product::ActiveRecord_Relation
注意不要在 .pluck()
上使用 distinct_products
。它将从 products 表中重新选择,并且独特的功能将不再起作用。