查询唯一属性列表

Ber*_*rnd 4 ruby arrays ruby-on-rails

我创建了一个Ruby数组(Articles),其中包含重复预设值的属性(类别)(例如,以下之一:"Drink","Main","Side").因此,我想获得此类别属性的所有唯一值的列表.

我想到了类似的东西

Article.all.category.uniq 
Run Code Online (Sandbox Code Playgroud)

......但那没用.这是一个示例数组:

[#<Article id: 1, category: "Drink">, #<Article id: 2, category: "Main">, #<Article id: 3, category: "Drink">, #<Article id: 4, category: "Side">, #<Article id: 5, category: "Drink">, ] 
Run Code Online (Sandbox Code Playgroud)

我正在寻找的结果列表的内容应该是这样的:"饮料","主要","侧面"

luc*_*tte 17

Article.all.map {|a| a.category}.uniq
Run Code Online (Sandbox Code Playgroud)

应该做的工作.

  • +1.或者[简写](http://stackoverflow.com/questions/1217088/what-does-mapname-mean-in-ruby):`Article.all.map(&:category).uniq`. (6认同)
  • 只有在你要杀死你的应用程序时才这样做.你想要的是`Article.pluck(:category).uniq` (2认同)

Fro*_*ost 7

我这样做:

Article.select("distinct category").map {|a| a.category}
Run Code Online (Sandbox Code Playgroud)

而不是lucapette的答案,因为这种操作在ruby中比在数据库中慢得多.

我的代码示例假设您正在使用某种SQL数据库.它与其他类型的数据库看起来不同.

  • `Article.distinct("category").map(&:category)`也可能有效. (2认同)

Rut*_*ger 5

在 Rails 3.2 中

Article.uniq.pluck(:category)
Run Code Online (Sandbox Code Playgroud)