Skip to content
Permalink
Browse files
Deprecate ActiveRecord::Result#to_hash in favor of #to_a
method returns an array of hashes, not a hash
e.g. Hash.try_convert(result) calls #to_hash and raises a TypeError

[Gannon McGibbon + Kevin Cheng]
  • Loading branch information
Kache authored and gmcgibbon committed Sep 18, 2018
1 parent e925cb4 commit 16510d609c601aa7d466809f3073ec3313e08937
@@ -1,3 +1,7 @@
* Deprecate `ActiveRecord::Result#to_hash` in favor of `ActiveRecord::Result#to_a`.

*Gannon McGibbon*, *Kevin Cheng*

* SQLite3 adapter supports expression indexes.

```
@@ -576,7 +576,7 @@ def table_structure_with_collation(table_name, basic_structure)
column
end
else
basic_structure.to_hash
basic_structure.to_a
end
end

@@ -21,7 +21,7 @@ module ActiveRecord
# ]
#
# # Get an array of hashes representing the result (column => value):
# result.to_hash
# result.to_a
# # => [{"id" => 1, "title" => "title_1", "body" => "body_1"},
# {"id" => 2, "title" => "title_2", "body" => "body_2"},
# ...
@@ -66,10 +66,18 @@ def each
end

# Returns an array of hashes representing each row record.
def to_hash
def to_a
hash_rows
end

def to_hash
ActiveSupport::Deprecation.warn(<<-MSG.squish)
`ActiveRecord::Result#to_hash` has been renamed to `to_a`.
`to_hash` is deprecated and will be removed in Rails 6.1.
MSG
to_a
end

alias :map! :map
alias :collect! :map

@@ -21,12 +21,22 @@ def result
assert_equal 3, result.length
end

test "to_hash returns row_hashes" do
test "to_a returns row_hashes" do
assert_equal [
{ "col_1" => "row 1 col 1", "col_2" => "row 1 col 2" },
{ "col_1" => "row 2 col 1", "col_2" => "row 2 col 2" },
{ "col_1" => "row 3 col 1", "col_2" => "row 3 col 2" },
], result.to_hash
], result.to_a
end

test "to_hash (deprecated) returns row_hashes" do
assert_deprecated do
assert_equal [
{ "col_1" => "row 1 col 1", "col_2" => "row 1 col 2" },
{ "col_1" => "row 2 col 1", "col_2" => "row 2 col 2" },
{ "col_1" => "row 3 col 1", "col_2" => "row 3 col 2" },
], result.to_hash
end
end

test "first returns first row as a hash" do

0 comments on commit 16510d6

Please sign in to comment.