RoR入門第13回

ActiveRecord基礎編は今日で終了。
リレーションシップ編に突入。
感想など。

予約語

type, xxx_type, xxx_count, positionなんかは間違って使っちゃいそうだ。

リレーションシップの宣言
  • 1対1
    • belongs_to <--> has_one
  • 1対多
    • belongs_to <--> has_many
  • 多対多
    • has_and_belongs_to_many <--> has_and_belongs_to_many

外部キーを持つ側がbelongs_to。

条件付きのリレーションシップ
belongs_to :available_hoge,
  :class_name => "Hoge",
  :foregin_key => "hoge_id",
  :conditions => "del_flg != 1"
リレーションの宣言で追加されるメソッド
  • リレーション先オブジェクトの取得

hoge.fugaという風にしてリレーション先オブジェクトを取得すると、以後SQLを発行せずキャッシュからオブジェクトを返すようになる。
hoge.fuga(true)とするとSQLを発行してオブジェクトを返す。

  • リレーション先オブジェクトのセット

hoge.fuga = instanceとすると外部キーのリンクが行われる。
hoge.fugaにすでにインスタンスがセットされている場合、そのインスタンスの外部キー項目にはNULLがセットされてDBが更新される。

  • has_manyなhas_one

has_oneは本来has_manyなリレーションに対して条件を絞り込んでリレーション先オブジェクトを1つにしたものに使用してもよい。

  • 親に関連づいた行の中から検索

hoge.fugas.find(options)

  • 集計

hoge.fugas.sum(options)はSQLを使用して集計を行う。