やる気がストロングZERO

やる気のストロングスタイル

【rails】コード読んだメモ

rubyのコードリーディングの練習でrailsのコードを少し読んだのでメモ

railsでのautoloadについて

railsではActiveSupportというmoduleが使われていて、色々便利な機能を提供してくれているらしい。
その一つにActiveSupport::Autoloadがあって、これをextendすると、 デフォルトのautoloadがオーバーライドされ、シンボル名だけでファイルパスを指定することなくautoloadを出来るようになるっぽい。 ただし、ディレクトリ構造はActiveSupport::Autoloadが想定している構造にしておく必要がある

module ActiveSupport
  extend ActiveSupport::Autoload
 
  autoload :Concern

上記で、active_support/concern.rbのConcernをautoload指定してくれるようになる。

ActiveRecordでのwhereの定義場所などについて

Modelの継承元であるActiveRecord::Baseを見ると、 whereメソッドはActive_Supportで提供されているdelegateメソッドで委譲されている。
※delegeteメソッドもActiveSupportの機能

委譲先はallメソッドによって導きだされる。

例えば、SomeModel.where("条件")を実行した場合
Relationクラスのインスタンス[SomeModel]が委譲先として導きだされ、Relation#whereが実行される。

whereメソッドはQueryMethodsモジュール(query_methods.rb)に定義されており、Relationにてincludeされている。