select_values(arel, name = nil, binds = [])
public

Returns an array of the values of the first column in a select:

select_values("SELECT id FROM companies LIMIT 3") => [1,2,3]

4Notes

select_values returns Strings for MySQL

tadman · Apr 8, 20091 thank

This method will return all values as strings from MySQL. It is easy to convert if required, for example, to integers:

select_values("SELECT id FROM companies LIMIT 3") => ['1','2','3']
select_values("SELECT id FROM companies LIMIT 3").collect(&:to_i) => [1,2,3]

select_values returns Strings for postgreSQL

moiristo · Jun 17, 2011

Will return strings too when using postgreSQL and gem pg (0.11.0).

Typecasting return values

moiristo · Jun 20, 2011

A better way to typecast the result array is to use AR's typecasting capabilities. Example:

column = Company.columns_hash['id']
select_values("SELECT id FROM companies LIMIT 3").map do |value|
column.type_cast(value)
end

Using Arel

hosh · Aug 25, 2015

You can also use Arel.

For example:

class ArticlePage < ActiveRecord::Base
belongs_to :article
scope :published, -> { where.not(published_at: nil) }
scope :all_ready, -> { select("every(workflow_state = 'ready') AS is_ready") }
end

class Article < ActiveRecord::Base
has_many :article_pages
def all_ready?
  ActiveRecord::Base.select_values(article_pages.all_ready,published) = 't'
end
end