ActiveRecord の Association と格闘
ActiveRecord のアソシエーションがらみで現在格闘中である。
- assciations.rb
- reflection.rb
- associations/*.rb
を読んでみた。それでもすっぽり頭にコードが入ってこない。確かにいろんなことをやっているから、どうしてもコードが難しくなってしまうのはわからなくもない。それにしても、いくつかの点で疑問点がある。
- AssociationReflection#primary_key_name (reflection.rb) はなぜ "primary_key_name" なのか?ソースを読むと、これはむしろ "foreign_key_name" とでもしたほうがしっくり行くような。
- HasManyThroughAssociation で使われるのだが、AssociationReflection#source_reflection というメソッドがある。これはなぜ "source_reflection" と呼ばれるのか?
私がしゃかりきになって、ActiveRecord のソースを呼んでいるのは、できればアソシエーションがらみの機能を使い倒したいからだ。ソースコードを全部読まなければやっていられないと思うほど、マニュアルは何度読んでもよくわからないし、どれができてどれができないということもわからない。
・・・まあ、そんなわけで、結構わかりずらいため、has_many :through なんて一般のプロジェクトでは、あんまり使われていないのかもしれない。いろんなオプションを同時に指定した場合、ActiveRecord の内部で何が起こるかはソースコードを読んでみるしかないような気がする。それがいやなら、基本的な機能だけ使って、あとは自前で作りこんだほうがまだましかもしれない・・・。
ActiveRecord 解読はここしばらくの私の個人的な課題として、研究結果をここでときどき発表したい。