Ruby-on-Rails: Selecting distinct values from the model

The .distinct option was added for rails 4 which is what the latest guides refer to.

Rails 2

If you are still on rails 2 you will need to use:

Client.select('distinct(name)')

Rails 3

If you are on Rails 3 you will need to use:

Client.select(:name).uniq

If you look at the equivalent section of the rails 3 guide you can see the difference between the two versions.


If you do not want ActiveRecord::Relations returned, just an array of the names as strings, then use:

Client.distinct.pluck(:name)

To get an ordered result set:

Client.order(:name).distinct.pluck(:name)

There are some approaches:

  1. Rails way:

    Model.select(:name).distinct
    
  2. Semi-rails way

    Model.select("DISTINCT ON(models.name) models.*")
    

    The second allows you to select the first record uniqued by name, but in the whole matter, not only names.