zumi-n 未経験からエンジニア転身日記

29歳、文系、未経験、営業がエンジニア目指してるzumi-nのプログラミングに関する諸々発信ブログ

【二日目】chatspace グループ機能作成、編集

現在実装しているchatアプリ グループ機能作成方法 備忘録

 

グループのコントローラ、モデル作成

 

まずは、以下の通り、groupsコントローラ作成 

ターミナル

$ rails g controller groups

 

Groupモデル作成 

ターミナル
1
$ rails g model group

 

そして 、このままUserモデルとGroupモデルのマイグレーションファイル編集と、アソシエーション定義かと思いますが、実はここで注意点がある。

 

中間テーブルの作成が必要!!!

 

group_userモデル作成 

ターミナル
1
$ rails g model group_user

 

?なぜgroup_userモデルを作成するのか?

このままだと、userモデルとgroupモデルが多対多の関係になるからだ。

多対多の関係は2つのモデルでは実現できないため、中間テーブルを利用して、多対多の関係を実現するわけです。

 

アソシエーションの定義

中間モデルを作成した場合、 throught: :中間モデル名として、アソシエーションを定義。

1
2
3
4
5
class Group < ApplicationRecord
  has_many :group_users
  has_many :users, through: :group_users
  validates :name, presence: true
end
 
1
2
3
4
class GroupUser < ApplicationRecord
  belongs_to :group
  belongs_to :user
end

 

group_userモデルのマイグレーションファイルの編集。

1
2
3
4
5
6
7
8
9
class CreateGroupUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :group_users do |t|
      t.references :group, foreign_key: true
      t.references :user, foreign_key: true
      t.timestamps
    end
  end
end

 

Railsでは、マイグレーションファイルで外部キーとなるカラムを追加するときにforeign_key: trueと記述することで外部キー制約を設定することができます。

 

今日はここまで。