WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

rails4でhabtm

      2015/05/17

create_join_tableを利用したマイグレーション

rails4.0からはhabtmリレーションシップ(:has_and_belongs_to_many)で利用する中間テーブルを簡単に生成する仕組みとしてcreate_join_tableが提供されている。
これを利用すれば簡単に中間テーブルが生成できそう。

マイグレーション(migration) – Railsドキュメント#テーブルを結合して作成(create_join_table)

例えばユーザ(User)と資格(Licence)というモデルがある場合、これらの中間テーブルを生成したい場合は以下のようにマイグレーションを生成する。

$ rails g migration create_join_table_user_licence licence user

生成されたファイルの中身は以下のようになる。


class CreateJoinTableUserLicence < ActiveRecord::Migration def change create_join_table :licences, :users do |t| # t.index [:licence_id, :user_id] # t.index [:user_id, :licence_id] end end end [/ruby]

インデックスの部分は必要に応じてコメントを削除する。

マイグレーションを実行すれば下記のように中間テーブルが生成される。

mysql> desc licences_users;
+------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| licence_id | int(11) | NO   | MUL | NULL    |       |
| user_id    | int(11) | NO   |     | NULL    |       |
+------------+---------+------+-----+---------+-------+

参考資料

 - Ruby on Rails , , , , ,