1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

そもそもActiveRecordとは

Railsが使っているORマッパーです。
これによって、RailsのモデルクラスとDBのテーブルが結び付けられます。
Railsアプリケーション内ではSQL文を書く必要はなく、ActiveRecordに則った書き方をすればいい感じにSQL文が発行されます。

instance.attributeの形でなぜ参照することができるのか?

例えばfirst_name, last_name, email, password, age属性を持つUserクラスがあるとすると, Railsでは下記のように簡単にattributeを参照することができます。

.rb
    user = User.last
    user.first_name # <= これ
    user.email # <= これ
    user.password # <= これ

なぜActiveRecordでは、このような参照の仕方ができるのでしょうか。
=> ActiveRecordがいい感じにattributeの値を返すインスタンスメソッドを自動で定義してるから。

インスタンスメソッドを見てみる

スクリーンショット 2022-10-16 11.32.18.png
↑ attributeがメソッドとして定義されていることがわかると思います。

メソッドはどこに定義されているのか

ローカルのモデルには定義されておらず、Rails本体に定義されています。

オーバーライド

インスタンスメソッドなので、しようと思えばオーバーライドもできます。(しなくてもいいです)

試しにやってみます。(RSpecの勉強中なのでRSpecを使ってやってみます。)
オーバーライド以前
スクリーンショット 2022-10-16 11.45.09.png
first_nameメソッドがインスタンスのfirst_name attributeを返すため返り値が"hello"になってれば正しい挙動です。
スクリーンショット 2022-10-16 11.51.44.png

オーバーライド後
スクリーンショット 2022-10-16 11.43.06.png
スクリーンショット 2022-10-16 11.55.45.png
結果を見るとオーバーライドされていることがわかると思います。

参考にしたサイト

終わりに

インターンをしてみて特に感じているのが、コードを追うことの重要性です。
以前はただなんとなく便利なものを使っている状態でしたが、それだと根本的に理解できておらず伸び悩むことに気付かされました。
できる限りロジックを理解することはかなり大事なのかなと思います。

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?