前提・実現したいこと
Railsでチャットアプリ(roomを作成し、その中で話す)を作っています。
解決したいことは、userとroomの中間テーブル(room_usersテーブル)に値が入ることです。
発生している問題・エラーメッセージ
roomを作成する際に、roomに入れるuserも選択肢、中間テーブルにroom_idとuser_idを保存したい。
しかし、room作成ボタンを押した後、roomテーブルにのみ値が入っており、room_usersテーブル(中間テーブル)には
値が入っていない。
### 該当のソースコード
Rails
1【new.html.erb】 2class RoomsController < ApplicationController 3 4 5 def index 6 7 end 8 9 def new 10 @room = Room.new 11 @room.room_users.build 12 end 13 14 def create 15 @room = Room.new(room_params) 16 if @room.save 17 redirect_to root_path 18 else 19 redirect_to new_room_path 20 end 21 end 22 23 def destroy 24 room = Room.find(params[:id]) 25 room.destroy 26 redirect_to root_path 27 end 28 29 private 30 31 def room_params 32 params.require(:room).permit(:name, room_users_attributes:{user_ids:[]}) 33 end 34 35end 36
Rails
1<div class='chat-room-form'> 2 <h1>新規チャットルーム</h1> 3 <%=form_with model: @room, local: true do |f|%> 4 <div class='chat-room-form__field'> 5 <div class='chat-room-form__field--left'> 6 <%= f.label :チャットルーム名, class: 'chat-room-form__label'%> 7 </div> 8 <div class='chat-room-form__field--right'> 9 <%= f.text_field :name, class: 'chat__room_name chat-room-form__input', placeholder: 'チャットルーム名を入力してください'%> 10 </div> 11 </div> 12 <div class='chat-room-form__field'> 13 </div> 14 <div class='chat-room-form__field'> 15 <div class='chat-room-form__field--left'> 16 <label class='chat-room-form__label' for='chat_room_チャットメンバー'>チャットメンバー</label> 17 </div> 18 <div class='chat-room-form__field--right'> 19 <select name="room[user_ids][]"> 20 <option value="">チャットするユーザーを選択してください</option> 21 <% User.where.not(id: current_user.id).each do |user| %> 22 <option value=<%= user.id %>><%= user.name %></option> 23 <% end %> 24 </select> 25 <input name="room[user_ids][]" type="hidden" value=<%= current_user.id %>> 26 </div> 27 </div> 28 <div class='chat-room-form__field'> 29 <div class='chat-room-form__field--left'></div> 30 <div class='chat-room-form__field--right'> 31 <%= f.submit class: 'chat-room-form__action-btn'%> 32 </div> 33 </div> 34 <% end %> 35</div>
Rails
1【room_users.rb(中間テーブル)】 2 3class RoomUser < ApplicationRecord 4 belongs_to :room, optional: true 5 belongs_to :user, optional: true 6end
Rails
1【user.rb】 2 3class User < ApplicationRecord 4 5 extend ActiveHash::Associations::ActiveRecordExtensions 6 7 devise :database_authenticatable, :registerable, 8 :recoverable, :rememberable, :validatable 9 10 belongs_to_active_hash :genre 11 belongs_to_active_hash :grade 12 belongs_to_active_hash :class_number 13 belongs_to_active_hash :number 14 15 has_many :room_users 16 has_many :rooms, through: :room_users 17 has_many :messages 18 accepts_nested_attributes_for :room_users 19 20 with_options presence: true do 21 validates :name 22 validates :email 23 validates :password 24 25 with_options numericality: { other_than: 1} do 26 validates :genre_id 27 validates :grade_id 28 validates :class_number_id 29 validates :number_id 30 end 31 end 32end
Rails
1【room.rb】 2 3class Room < ApplicationRecord 4 5 has_many :room_users 6 has_many :users, through: :room_users 7 has_many :messages, dependent: :destroy 8 accepts_nested_attributes_for :room_users 9 validates :name, presence: true 10end
Rails
1【ログ】 2 3Started POST "/rooms" for ::1 at 2020-10-30 21:19:38 +0900 4Processing by RoomsController#create as HTML 5 Parameters: {"authenticity_token"=>"29rqX0N8xw8O14Yoppch1Eu4jo+rGqHvvwQWeqjWLCbFCeHyK9RMsLsywC8WiRaZbQNh8cOAcOLY1UAuczVQ4Q==", "room"=>{"name"=>"test", "user_ids"=>["2", "1"]}, "commit"=>"登録する"} 6 User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 7Unpermitted parameter: :user_ids 8 (0.2ms) BEGIN 9 ↳ app/controllers/rooms_controller.rb:15:in `create' 10 Room Create (0.3ms) INSERT INTO `rooms` (`name`, `created_at`, `updated_at`) VALUES ('test', '2020-10-30 12:19:38.500111', '2020-10-30 12:19:38.500111') 11 ↳ app/controllers/rooms_controller.rb:15:in `create' 12 (1.9ms) COMMIT 13 ↳ app/controllers/rooms_controller.rb:15:in `create' 14Redirected to http://localhost:3000/ 15Completed 302 Found in 10ms (ActiveRecord: 2.8ms | Allocations: 5200) 16 17
更新日時:10月30日(金) 14:20