新規投稿画面で作成を押すと値は入っているのに保存されない
解決したいこと
Ruby on Rails6.0でチャットアプリを作成しています。
チャットルーム新規作成画面で値を入れたのに保存されず新規作成画面に戻ってしまうエラーに悩んでいます。
発生している問題・エラー
新規作成画面でチャットルームとメンバーを入力し、作成するを押すと新規作成画面に戻されてしまう。またMySQLのデータベースにも保存されていない。
該当するソースコード
room controller↓
room.rb
class RoomsController < ApplicationController
def index
end
def new
@room = Room.new
end
def create
@room = Room.new(room_params)
if @room.save
redirect_to root_path
else
render :new
end
end
private
def room_params
params.require(:room).permit(:name, user_ids:[])
end
end
新規投稿画面のview↓
new.html.erb
div class='chat-room-form'>
<h1>新規ルーム作成</h1>
<%=form_with model: @room, local: true do |f|%>
<%= render "shared/error_messages", model: f.object %>
<div class='chat-room-form__field'>
<div class='chat-room-form__field--left'>
<%= f.label :部署名, class: 'chat-room-form__label'%>
</div>
<div class='chat-room-form__field--right'>
<%= f.text_field :name, class: 'chat__room_name chat-room-form__input', placeholder: '部署名を入力してください'%>
</div>
</div>
<div class='chat-room-form__field'>
</div>
<div class='chat-room-form__field'>
<div class='chat-room-form__field--left'>
<label class='chat-room-form__label' for='chat_room_チャットメンバー'>部署先</label>
</div>
<div class='chat-room-form__field--right'>
<select name="room[user_ids][]">
<option value="">チャットする部署を選んで下さい</option>
<% User.where.not(id: current_user.id).each do |user| %>
<option value=<%= user.id %>><%= user.name %></option>
<% end %>
</select>
<input name="room[user_ids][]" type="hidden" value=<%= current_user.id %>>
</div>
</div>
<div class='chat-room-form__field'>
<div class='chat-room-form__field--left'></div>
<div class='chat-room-form__field--right'>
<%= f.submit "ルーム作成", class: 'chat-room-form__action-btn'%>
</div>
</div>
<% end %>
</div>
model↓
room.rb
class Room < ApplicationRecord
has_many :room_users
has_many :users, through: :room_users
has_many :messages
validates :name, presence: true
end
自分で試したこと
ターミナルでroom_paramsに格納されているのか確認した
ターミナル
9: def create
=> 10: binding.pry
11: @room = Room.new(room_params)
12: if @room.save
13: redirect_to root_path
14: else
15: render :new
16: end
17: end
[1] pry(#<RoomsController>)> room_params
=> <ActionController::Parameters {"name"=>"テストチャット", "user_ids"=>["5", "3"]} permitted: true>
通信状態は大丈夫か確認した
ターミナル
[2] pry(#<RoomsController>)> exit
User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IN (5, 3)
↳ app/controllers/rooms_controller.rb:11:in `create'
Rendering rooms/new.html.erb within layouts/application
Rendered shared/_error_messages.html.erb (Duration: 0.3ms | Allocations: 142)
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` != 3
↳ app/views/rooms/new.html.erb:24
Rendered rooms/new.html.erb within layouts/application (Duration: 2.9ms | Allocations: 1480)
[Webpacker] Everything's up-to-date. Nothing to do
Completed 200 OK in 57049ms (Views: 14.0ms | ActiveRecord: 1.3ms | Allocations: 31051)
通信状態はよくてparamsにはきちんと格納されていて値としては入っているはずなのにデータベースに保存されない原因が突き止められませんでした。
よろしくお願いいたします。
0