ActiveRecord の Association と格闘

ActiveRecord のアソシエーションがらみで現在格闘中である。

  • assciations.rb
  • reflection.rb
  • associations/*.rb

を読んでみた。それでもすっぽり頭にコードが入ってこない。確かにいろんなことをやっているから、どうしてもコードが難しくなってしまうのはわからなくもない。それにしても、いくつかの点で疑問点がある。

  1. AssociationReflection#primary_key_name (reflection.rb) はなぜ "primary_key_name" なのか?ソースを読むと、これはむしろ "foreign_key_name" とでもしたほうがしっくり行くような。
  2. HasManyThroughAssociation で使われるのだが、AssociationReflection#source_reflection というメソッドがある。これはなぜ "source_reflection" と呼ばれるのか?

私がしゃかりきになって、ActiveRecord のソースを呼んでいるのは、できればアソシエーションがらみの機能を使い倒したいからだ。ソースコードを全部読まなければやっていられないと思うほど、マニュアルは何度読んでもよくわからないし、どれができてどれができないということもわからない。

・・・まあ、そんなわけで、結構わかりずらいため、has_many :through なんて一般のプロジェクトでは、あんまり使われていないのかもしれない。いろんなオプションを同時に指定した場合、ActiveRecord の内部で何が起こるかはソースコードを読んでみるしかないような気がする。それがいやなら、基本的な機能だけ使って、あとは自前で作りこんだほうがまだましかもしれない・・・。

ActiveRecord 解読はここしばらくの私の個人的な課題として、研究結果をここでときどき発表したい。