多対多の関連テーブル

前に一度やったのを久しぶりにやると,またはまった・・・orz
なので忘れないうちにメモ.

Rails でテーブルの多対多を表すためには,has_and_belongs_to_many を使う.例えば,Person と FavoritThing というモデルがあったとする.Person は FoveritThing を幾つか持つとすると,次のように書く.

class Person < ActiveRecord::Base
    has_and_belongs_to_many :foverit_things
end

このとき,has_and_belongs_to_many の引数に 参照先モデルの複数名を指定する.また,双方向にしたい場合は,参照先にも同様に定義する.

class FavoritThing  < ActiveRecord::Base
    has_and_belongs_to_many :people
end

注意するのは,関連テーブルもマイグレーション等で作っておく必要がある.関連テーブルのテーブル名は,二つのモデルの複数形をアルファベット順に並べて,”_” で繋げた物になる.