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)
- 集計