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されている。