Class: ActiveRecord::Result
- Inherits:
-
Object
- Object
- ActiveRecord::Result
- Includes:
- Enumerable
- Defined in:
- lib/active_record/result.rb
Overview
This class encapsulates a result returned from calling #exec_query on any database connection adapter. For example:
result = ActiveRecord::Base.connection.exec_query('SELECT id, title, body FROM posts')
result # => #<ActiveRecord::Result:0xdeadbeef>
# Get the column names of the result:
result.columns
# => ["id", "title", "body"]
# Get the record values of the result:
result.rows
# => [[1, "title_1", "body_1"],
[2, "title_2", "body_2"],
...
]
# Get an array of hashes representing the result (column => value):
result.to_hash
# => [{"id" => 1, "title" => "title_1", "body" => "body_1"},
{"id" => 2, "title" => "title_2", "body" => "body_2"},
...
]
# ActiveRecord::Result also includes Enumerable.
result.each do |row|
puts row['title'] + " " + row['body']
end
Instance Attribute Summary collapse
-
#column_types ⇒ Object
readonly
Returns the value of attribute column_types.
-
#columns ⇒ Object
readonly
Returns the value of attribute columns.
-
#rows ⇒ Object
readonly
Returns the value of attribute rows.
Instance Method Summary collapse
- #[](idx) ⇒ Object
-
#cast_values(type_overrides = {}) ⇒ Object
:nodoc:.
-
#each ⇒ Object
Calls the given block once for each element in row collection, passing row as parameter.
-
#empty? ⇒ Boolean
Returns true if there are no records, otherwise false.
-
#first ⇒ Object
Returns the first record from the rows collection.
-
#initialize(columns, rows, column_types = {}) ⇒ Result
constructor
A new instance of Result.
- #initialize_copy(other) ⇒ Object
-
#last ⇒ Object
Returns the last record from the rows collection.
-
#length ⇒ Object
Returns the number of elements in the rows array.
-
#to_ary ⇒ Object
Returns an array of hashes representing each row record.
-
#to_hash ⇒ Object
Returns an array of hashes representing each row record.
Constructor Details
#initialize(columns, rows, column_types = {}) ⇒ Result
Returns a new instance of Result.
39 40 41 42 43 44 |
# File 'lib/active_record/result.rb', line 39 def initialize(columns, rows, column_types = {}) @columns = columns @rows = rows @hash_rows = nil @column_types = column_types end |
Instance Attribute Details
#column_types ⇒ Object (readonly)
Returns the value of attribute column_types.
37 38 39 |
# File 'lib/active_record/result.rb', line 37 def column_types @column_types end |
#columns ⇒ Object (readonly)
Returns the value of attribute columns.
37 38 39 |
# File 'lib/active_record/result.rb', line 37 def columns @columns end |
#rows ⇒ Object (readonly)
Returns the value of attribute rows.
37 38 39 |
# File 'lib/active_record/result.rb', line 37 def rows @rows end |
Instance Method Details
#[](idx) ⇒ Object
81 82 83 |
# File 'lib/active_record/result.rb', line 81 def [](idx) hash_rows[idx] end |
#cast_values(type_overrides = {}) ⇒ Object
:nodoc:
99 100 101 102 103 104 105 106 |
# File 'lib/active_record/result.rb', line 99 def cast_values(type_overrides = {}) # :nodoc: types = columns.map { |name| column_type(name, type_overrides) } result = rows.map do |values| types.zip(values).map { |type, value| type.deserialize(value) } end columns.one? ? result.map!(&:first) : result end |
#each ⇒ Object
Calls the given block once for each element in row collection, passing row as parameter.
Returns an Enumerator
if no block is given.
55 56 57 58 59 60 61 |
# File 'lib/active_record/result.rb', line 55 def each if block_given? hash_rows.each { |row| yield row } else hash_rows.to_enum { @rows.size } end end |
#empty? ⇒ Boolean
Returns true if there are no records, otherwise false.
72 73 74 |
# File 'lib/active_record/result.rb', line 72 def empty? rows.empty? end |
#first ⇒ Object
Returns the first record from the rows collection. If the rows collection is empty, returns nil
.
87 88 89 90 |
# File 'lib/active_record/result.rb', line 87 def first return nil if @rows.empty? Hash[@columns.zip(@rows.first)] end |
#initialize_copy(other) ⇒ Object
108 109 110 111 112 113 |
# File 'lib/active_record/result.rb', line 108 def initialize_copy(other) @columns = columns.dup @rows = rows.dup @column_types = column_types.dup @hash_rows = nil end |
#last ⇒ Object
Returns the last record from the rows collection. If the rows collection is empty, returns nil
.
94 95 96 97 |
# File 'lib/active_record/result.rb', line 94 def last return nil if @rows.empty? Hash[@columns.zip(@rows.last)] end |
#length ⇒ Object
Returns the number of elements in the rows array.
47 48 49 |
# File 'lib/active_record/result.rb', line 47 def length @rows.length end |
#to_ary ⇒ Object
Returns an array of hashes representing each row record.
77 78 79 |
# File 'lib/active_record/result.rb', line 77 def to_ary hash_rows end |
#to_hash ⇒ Object
Returns an array of hashes representing each row record.
64 65 66 |
# File 'lib/active_record/result.rb', line 64 def to_hash hash_rows end |