Collect all values for a given column in an ActiveRecord scope

Updated . Posted . Visible to the public.

In modern Rails versions you can also use ActiveRecord's pluck Show archive.org snapshot method.

User.active.pluck(:id)
=> [1, 5, 23, 42]

If you are plucking from the id column in particular you can also say:

User.active.ids
=> [1, 5, 23, 42]

For a DISTINCT selection, use distinct on your scope (not the resulting array).

Article.distinct.pluck(:state)
# SELECT DISTINCT state FROM articles
=> ['draft', 'published']

In Rails 3 and 4 you must use uniq instead of distinct:

Article.uniq.pluck(:state)
# SELECT DISTINCT state FROM articles
=> ['draft', 'published']

Plucking columns in legacy Rails versions

For older Rails versions you can use the collect_column method from Edge Rider Show archive.org snapshot for the same purpose as pluck.

Arne Hartherz
Last edit
Felix Eschey
Keywords
column, single, columns
License
Source code in this card is licensed under the MIT License.
Posted by Arne Hartherz to makandra dev (2010-09-13 17:57)