前提・実現したいこと
チャットアプリを作ろうとしています。
しかし保存をしようと中間テーブルのroom_usersテーブルだけではなくRoomテーブルにも保存されません。
なので両テーブルに保存されるようにしたいです。(エラーメッセージは出ていません。)
該当ソースコード
Ruby
1**rooms_controller.rb** 2 3class RoomsController < ApplicationController 4 def index 5 @rooms = Room.all.order("created_at DESC") 6 end 7 8 9 def show 10 @room = Room.find(params[:id]) 11 @messages = @room.messages.includes(:user).order(:id).last(100) 12 @message = current_user.messages.build 13 end 14 15 def new 16 @room = Room.new 17 end 18 19 def create 20 # binding.pry 21 @room = Room.new(room_params) 22 if @room.save 23 redirect_to root_path 24 else 25 render :new 26 end 27 end 28 29 private 30 31 def room_params 32 params.require(:room).permit(:name, user_ids: []) 33 end 34 35end
Ruby
1**room.rb** 2 3class Room < ApplicationRecord 4 has_many :room_users 5 has_many :users, through: :room_users 6 has_many :messages 7end
Ruby
1**user.rb** 2 3class User < ApplicationRecord 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 has_many :room_users 7 has_many :rooms, through: :room_users 8 has_many :messages 9 10 validates :profile, length: {maximum: 200} 11 12 with_options presence: true do 13 validates :nickname 14 validates :password, format: {with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{6,}+\z/i} 15 end 16end
Ruby
1**room_user.rb** 2 3class RoomUser < ApplicationRecord 4 belongs_to :room 5 belongs_to :user 6end
HTML
1**room/new.html.erb** 2 3<%= form_with model: @room, local: true do |f| %> 4 <%= f.label :name, "チャットルーム名" %><br /> 5 <p><%= f.text_field :name %></p> 6 <select name="room[user_ids][]"> 7 <option>チャットするユーザーを選んでください</option> 8 <% User.where.not(id: current_user.id).each do |user| %> 9 <option value=<%= user.id %>><%= user.nickname %></option> 10 <% end %> 11 </select> 12 <input name="room[user_ids][]" type="hidden" value=<%= current_user.id %>> 13 <p><%= f.submit "ルームの作成" %><p> 14 <% end %>
試したこと
binding.pryで止め、params内の確認。
######結果
[1] pry(#<RoomsController>)> params => <ActionController::Parameters {"authenticity_token"=>"8+oW0YsPTtpMzAPxhc3cUL8QFM3z7UibGQBNNRnQ9zVTg7QSd/4Fz6LrwMRaTZBjyWjfcHuvatXh+VJZ333p9w==", "room"=>{"name"=>"新規チャットルーム", "user_ids"=>["1", "2"]}, "commit"=>"ルームの作成", "controller"=>"rooms", "action"=>"create"} permitted: false>
room_paramsの中身確認
######結果
[2] pry(#<RoomsController>)> room_params => <ActionController::Parameters {"name"=>"新規チャットルーム", "user_ids"=>["1", "2"]} permitted: true>
補足情報
Ruby 2.6.5
Rails 6.0.3
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。