こんにちは、endoです。
今回は「HABTM」のテーブル作成の方法です。
「has_and__belongs_to_many」の多対多の関係性を頭文字で略語で表示しているものです。
発音はなんて発音されているのでしょうか。 自分は「ハブトゥム」って読んでいますが、どんな呼び方をしているのか気になります。 こんな呼び方があるよって方は、ぜひ教えてください!
さて、「HABTM」ですが、テーブル作成で便利に作成することができます。
rails g migration create_join_table_facility_prefecture facility prefecture
こんなファイルが出来上がります。
class CreateJoinTableFacilityPrefecture < ActiveRecord::Migration
def change
create_join_table :facilities, :prefectures do |t|
# t.index [:facility_id, :prefecture_id]
# t.index [:prefecture_id, :facility_id]
end
end
end
これでもいいのですが、foreign_key
に対して爪が甘いなと思います。
そこで、これを改造します。
class CreateJoinTableFacilityPrefecture < ActiveRecord::Migration
def change
create_join_table :facilities, :prefectures do |t|
t.references :facility, index: true, foreign_key: true
t.references :prefecture, index: true, foreign_key: true
# t.index [:facility_id, :prefecture_id]
# t.index [:prefecture_id, :facility_id]
end
end
end
なお、改造しなくてもrails5.1.1
は下記のコマンドでいけます。
rails g migration create_join_table_facility_prefecture facility:references prefecture:references
class CreateJoinTableFacilityPrefecture < ActiveRecord::Migration[5.1]
def change
create_join_table :facilities, :prefectures do |t|
t.references :facility, foreign_key: true
t.references :prefecture, foreign_key: true
end
end
end
issue自体は下記で上がっていました。
create_join_table should include indexes and foreign key contraints
取り込まれて使用できるようになっております。
foreign_key
好きが突っ込むよな!って思ったので、嬉しかったです。
アクトインディではHABTMについて語りたいエンジニアを募集しております。