【二日目】chatspace グループ機能作成、編集
現在実装しているchatアプリ グループ機能作成方法 備忘録
グループのコントローラ、モデル作成
まずは、以下の通り、groupsコントローラ作成
ターミナル
1 |
$ 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と記述することで外部キー制約を設定することができます。
今日はここまで。