ご回答いただけるとありがたいです。よろしくお願いします!
前提・実現したいこと
新規グループを作成した時に、中間テーブル(group_users)に情報が保存されるようにしたい。
userはdeviseを用いている。
発生している問題・エラーメッセージ
現在、新規グループ作成ページで必要な情報を入力して送信すれば、groupsテーブルに情報が保存される。
しかし、中間テーブルであるgroup_usersテーブルには何も保存されない。
※エラーメッセージが出るわけではない。
該当のソースコード
- routes.rb
Rails.application.routes.draw do devise_for :users root to: "tweets#index" resources :groups, only: [:new, :create] end
- migration
class CreateGroups < ActiveRecord::Migration[6.0] def change create_table :groups do |t| t.string :name, null: false, unique: true t.string :content t.timestamps end end end
class CreateGroupUsers < ActiveRecord::Migration[6.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
- model
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :nickname, presence: true has_many :group_users has_many :groups, through: :group_users end
class Group < ApplicationRecord has_many :group_users has_many :users, through: :group_users validates :name, presence: true end
class GroupUser < ApplicationRecord belongs_to :group belongs_to :user end
- controller
class GroupsController < ApplicationController def new @group = Group.new @group.users << current_user end def create @group = Group.new(group_params) if @group.save redirect_to root_path else render :new end end private def group_params params.require(:group).permit(:name, :content, user_ids: []) end end
- views/groups/new.html.erb
<div class='chat-room-form'> <h1>新規グループ作成</h1> <%=form_with model: @group, local: true do |f|%> <div class='chat-group-form__field'> <div class='chat-group-form__field--left'> <%= f.label :グループ名, class: 'chat-group-form__label'%> </div> <div class='chat-group-form__field--right'> <%= f.text_field :name, class: 'chat__group_name chat-group-form__input', placeholder: 'グループ名を入力してください'%> </div> </div> <div class='chat-group-form__field'> <div class='chat-group-form__field--left'> <%= f.label :グループ内容, class: 'chat-group-form__label'%> </div> <div class='chat-group-form__field--right'> <%= f.text_field :content, class: 'chat__group_name chat-group-form__input', placeholder: 'グループの内容を入力してください'%> </div> </div> <div class='chat-group-form__field'> <div class='chat-group-form__field--left'></div> <div class='chat-group-form__field--right'> <%= f.submit class: 'chat-group-form__action-btn'%> </div> </div> <% end %> </div>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。