LoginSignup
6
4

More than 3 years have passed since last update.

Rails6 のちょい足しな新機能を試す29(ActiveRecord::Result.to_a編)

Last updated at Posted at 2019-06-03

はじめに

Rails 6 に追加されそうな新機能を試す第29段。 今回は、 ActiveRecord::Result.to_a 編です。
Rails 6 では、 ActiveRecord::Result.to_hashDEPRECATION WARNING が出るようになります。
代わりに、 ActiveRecord::Result.to_a が用意されました。
ActiveRecord::Result.to_hashArray オブジェクトを返していたため、それに合わせてメソッド名を変更するということみたいです。

Ruby 2.6.3, Rails 6.0.0.rc1 で確認しました。Rails 6.0.0.rc1 は gem install rails --prerelease でインストールできます。

$  rails --version
Rails 6.0.0.rc1

Rails プロジェクトを作る

$ rails new rails6_0_0rc1
$ cd rails6_0_0rc1

User モデルを作る

$ bin/rails g model User name

migration の実行

$ bin/rails db:create db:migrate

データを作る

ちょっと試すために、データを2件登録します。件数に深い意味はありません。

bash-4.4# bin/rails c
Running via Spring preloader in process 109
Loading development environment (Rails 6.0.0.rc1)
irb(main):001:0> User.create(name: 'Taro')
 ...(略)
irb(main):002:0> User.create(name: 'Hanako')
 ...(略)

select_all を使って ActiveRecord::Result オブジェクトを取得する

selec_all を使って、データを検索し、ActiveRecord::Result オブジェクトを取得します。

irb(main):003:0> conn = ActiveRecord::Base.connection
   ... (長いので略)
irb(main):004:0> users = conn.select_all("SELECT * FROM users")
   (0.5ms)  SELECT * FROM users
   ... (長いので略)

取得した users は ActiveRecord::Result オブジェクトです。

irb(main):005:0> users.class
=> ActiveRecord::Result

to_hash と to_a

to_hashto_a メソッドを実行してみます。
to_hash を実行すると DEPRECATION WARNING が表示されます。

irb(main):006:0> users.to_hash
DEPRECATION WARNING: `ActiveRecord::Result#to_hash` has been renamed to `to_a`. `to_hash` is deprecated and will be removed in Rails 6.1. (called from irb_binding at (irb):5)
=> [{"id"=>1, "name"=>"Taro", "created_at"=>2019-06-01 07:17:28 UTC, "updated_at"=>2019-06-01 07:17:28 UTC}, {"id"=>2, "name"=>"Hanako", "created_at"=>2019-06-01 07:17:37 UTC, "updated_at"=>2019-06-01 07:17:37 UTC}]

to_a を実行すると DEPRECATION WARNING は表示されません。

irb(main):006:0> users.to_a
=> [{"id"=>1, "name"=>"Taro", "created_at"=>2019-06-01 07:17:28 UTC, "updated_at"=>2019-06-01 07:17:28 UTC}, {"id"=>2, "name"=>"Hanako", "created_at"=>2019-06-01 07:17:37 UTC, "updated_at"=>2019-06-01 07:17:37 UTC}]

試したソース

試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try029_activerecord_result_to_a

参考情報

6
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4