method
select_values
v5.1.7 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::DatabaseStatements
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
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
Will return strings too when using postgreSQL and gem pg (0.11.0).
Typecasting return values
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
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