Help us understand the problem. What is going on with this article?

ActiveRecordのfindはインスタンスを生成しているか確認してみた。

More than 1 year has passed since last update.

Railsエンジニアとして1ヶ月目の駆け出しエンジニアです。

ActiveRecordのfindに関して気になったことがあったので検証してみました。

背景

前提としてUserクラス内にnameメソッドが定義されていることとします。

user = User.new
user.name

その場合、Userクラスのインスタンスを生成することでインスタンスメソッドのnameを呼び出すことはできますよね?

user = User.find(params[:id])
user.name

対して、ActiveRecordのfindを使用した際は

インスタンスを生成していないのに、何でインスタンスメソッドを呼び出すことができるのか?疑問に思いました・・・

デバッグしてみると

user = User.find(params[:id])
binding.pry

気になったのでbinding.pryを挟んでみてデバック!

インスタンス化されているのか確認できるようなメソッドがないか調べていると・・・
instance_of?という便利メソッドを発見しました!

instance_of?メソッドは、レシーバのオブジェクトが引数klassクラスのインスタンスであればtrue、そうでなければfalseを返します。

Rubyリファレンスを読んでみると上記のように記載されており、今の状況にピッタリなメソッドでした。

では早速instace_of?メソッドを使用して検証!

user.instance_of?(User)
=> true

instance_of?メソッドを使用することで、引数に指定したクラスのインスタンスなのか確認することができます。

trueが返ってきました!!

結論

instance_of?メソッドを使用してtrueが返ってきたということは、

userはUserクラスのインスタンスということですね!

ActiveRecordのfindはインスタンスを裏で生成してくれるみたいですね!便利!

【参考記事】
https://ref.xaio.jp/ruby/classes/object/instance_of

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした