1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 07:08:01 +00:00
Files
til/rails/get-an-array-of-values-from-the-database.md

41 lines
1.4 KiB
Markdown

# Get An Array Of Values From The Database
We generally get data from our database through [ActiveRecord
models](https://api.rubyonrails.org/classes/ActiveRecord/Base.html):
```ruby
> Product.where(available: true).pluck(:sku)
[ "efg-1234", "pqr-3455", ... ]
```
If we need to do a more specialized query, we might reach for
[`execute`](https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-execute):
```ruby
> ActiveRecord::Base.connection.execute(<<-SQL)
select split_part(sku, '-', 1) product_type
from products
where available = true;
SQL
[{ "product_type" => "efg" }, { "product_type" => "pqr" }, ... ]
```
The results are bundled up in a predictable, but verbose array of hashes.
We could trim the result down to just the values using either
[`select_values`](https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-select_values)
or
[`select_rows`](https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-select_rows):
```ruby
> ActiveRecord::Base.connection.select_values(<<-SQL)
select split_part(sku, '-', 1) product_type
from products
where available = true;
SQL
[ "efg", "pqr", ... ]
```
If the SQL statement is to return more than one row in the result, then you'll
want `select_rows` instead of `select_values`.