前半参加セッション『ARの章を読むよ』

AWDwRの14章、"ActiveRecord Basics"を読もう、というセッションだったのですが、本を読むというよりもARよもやま話という感じになりました。

  • AR vs. JavaなORM
    • Javaの人が多かったのと、私がJavaさっぱり分からないのでそれを聞きたかったのとでJavaの話をしてしまいました。
    • S2DAOはなかなかいい感じらしい。設定レス。
  • DynamicFinderの仕組み
    • method_missingを多用。activerecord-1.13.2/lib/active_record/base.rb # 970行目くらいからマジックが始まってる。
    • ARClass.find_by_A_and_B(a_item,b_item)はできるが、ARClass.find_by_A_or_Bはできない。(1000行目付近construct_conditions_from_argumentsを参照。
    def construct_conditions_from_arguments(attribute_names, arguments)
      (略)
       [ conditions.join(" AND "), *arguments[0...attribute_names.length] ]
    end
  • IDの付け方
    • has_and_belogs_to_many(habtm)を使うと関連テーブル自体に属性が付けられる。AWDwR P.240あたりを参照。
    • 複合キーは、別途単一の主キーを用意するほうがAR的には楽。
      • 業務意味があるカラムを主キーにするのは間違い、という考え方がはやり出しているらしい。AWDwRでも触れられていた気がする。
      • 例えば受注番号とかを考えてみると、20051218_01という体系を20051218_001にしたくなったら大変じゃない?
  • validateのタイミング
    • 入力項目が多いときに、複数画面を遷移しながら入力する作りにすることがある(アンケートとか)。画面遷移をするときにその画面内での入力項目へのvalidateをしたい、というのが与件。
      • DBに入れるときと、画面遷移でのチェックとでは意味的にも異なる。AR使えないのもしかたがないし、自分で書くしかないのでは?。
      • 後半セッションでid:kunitさんから指摘。遷移時に情報を保管するためのクラスを作って、それでActiveRecord::Validations::ClassMethodsをincludeすればできないかなぁ、と。
      • あと、女性の方(お名前を伺う機会がなかったので、、すみません)にもifとProcでなんとかなりませんかね、という指摘を受けました。興味がありますので、もしよろしければ詳細をコメントとかに書いていただけるとうれしいです。