そもそもActiveRecordとは
Railsが使っているORマッパーです。
これによって、RailsのモデルクラスとDBのテーブルが結び付けられます。
Railsアプリケーション内ではSQL文を書く必要はなく、ActiveRecordに則った書き方をすればいい感じにSQL文が発行されます。
instance.attributeの形でなぜ参照することができるのか?
例えばfirst_name, last_name, email, password, age属性を持つUserクラスがあるとすると, Railsでは下記のように簡単にattributeを参照することができます。
user = User.last
user.first_name # <= これ
user.email # <= これ
user.password # <= これ
なぜActiveRecordでは、このような参照の仕方ができるのでしょうか。
=> ActiveRecordがいい感じにattributeの値を返すインスタンスメソッドを自動で定義してるから。
インスタンスメソッドを見てみる
↑ attributeがメソッドとして定義されていることがわかると思います。
メソッドはどこに定義されているのか
ローカルのモデルには定義されておらず、Rails本体に定義されています。
オーバーライド
インスタンスメソッドなので、しようと思えばオーバーライドもできます。(しなくてもいいです)
試しにやってみます。(RSpecの勉強中なのでRSpecを使ってやってみます。)
オーバーライド以前
first_nameメソッドがインスタンスのfirst_name attributeを返すため返り値が"hello"になってれば正しい挙動です。
オーバーライド後
結果を見るとオーバーライドされていることがわかると思います。
参考にしたサイト
終わりに
インターンをしてみて特に感じているのが、コードを追うことの重要性です。
以前はただなんとなく便利なものを使っている状態でしたが、それだと根本的に理解できておらず伸び悩むことに気付かされました。
できる限りロジックを理解することはかなり大事なのかなと思います。