前提・実現したいこと
DM機能の実装中なのですが、送信したメッセージがDBに保存されません。
どなたかご教授いただければ幸いです。
発生している問題・エラーメッセージ
Started POST "/messages" for ::1 at 2022-04-29 13:20:48 +0900 Processing by MessagesController#create as HTML Parameters: {"authenticity_token"=>"4HCuuHQj7NdvfhD/JLswirzYc3oOTEsGh4d0JBwkA2B3eY2MacDZYNPhKmZmnGB3ACA7ocuKdjtf+WVCmLnX2A==", "message"=>{"message"=>"初めまして", "room_id"=>"1"}, "commit"=>"送信"} User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1 RoomUser Load (0.4ms) SELECT `room_users`.* FROM `room_users` WHERE `room_users`.`profile_id` = 2 AND `room_users`.`room_id` = 1 ↳ app/controllers/messages_controller.rb:6:in `create' (0.2ms) BEGIN ↳ app/controllers/messages_controller.rb:7:in `create' Room Load (0.3ms) SELECT `rooms`.* FROM `rooms` WHERE `rooms`.`id` = 1 LIMIT 1 ↳ app/controllers/messages_controller.rb:7:in `create' (0.3ms) ROLLBACK ↳ app/controllers/messages_controller.rb:7:in `create' Redirected to http://localhost:3000/rooms/1 Completed 302 Found in 11ms (ActiveRecord: 1.5ms | Allocations: 6792)
該当のソースコード
messages_controller.rb
ruby
1before_action :authenticate_user!, only: [:create] 2 3 def create 4 if RoomUser.where(profile_id: current_user.id, room_id: params[:message][:room_id]).present? 5 @message = Message.create(params.require(:message).permit(:profile_id, :message, :room_id).merge(profile_id: current_user.id)) 6 redirect_to room_path(@message.room_id) 7 else 8 flash[:alert] = "メッセージを送信できませんでした" 9 end 10 end
rooms_controller.rb
ruby
1before_action :authenticate_user! 2 3 def create 4 @room = Room.create 5 @roomUser1 = RoomUser.create(room_id: @room.id, profile_id: current_user.id) 6 @roomUser2 = RoomUser.create(params.require(:room_user).permit(:profile_id, :room_id).merge(room_id: @room.id)) 7 redirect_to room_path(@room.id) 8 end 9 10 def show 11 @room = Room.find(params[:id]) 12 if RoomUser.where(profile_id: current_user.id, room_id: @room.id).present? 13 @messages = @room.messages 14 @message = Message.new 15 @roomUsers = @room.room_users 16 else 17 redirect_back(fallback_location: root_path) 18 end 19 end
rooms/show.html.erb
ruby
1<div class="left-button"> 2 <%= link_to "一覧に戻る", root_path, class:"edit-link" %> 3</div> 4<% @roomUsers.each do |ru| %> 5 <div class="user-name"> 6 <strong> 7 <%= image_tag ru.profile.image.url, :size => '200x200', class:"user-image" %> 8 <a class="rooms-user-link" href="/profiles/<%= ru.profile.id %>"> 9 <%= ru.profile.nickname %>さん 10 </a> 11 </strong> 12 </div> 13<% end %> 14<hr> 15<div class="chats"> 16 <div class="chat"> 17 <% if @messages.present? %> 18 <% @messages.each do |m| %> 19 <div class="chat-box"> 20 <div class="chat-face"> 21 <%= image_tag m.profie.image.url, :size => '200x200', class:"user-image" %> 22 </div> 23 <div class="chat-hukidashi"> <strong><%= m.message %></strong> <br> 24 <%= m.created_at.strftime("%Y-%m-%d %H:%M")%> 25 </div> 26 </div> 27 <% end %> 28 <% end %> 29 </div> 30 <div class="posts"> 31 <%= form_with model: @message, local: true do |f| %> 32 <%= f.text_field :message, placeholder: "メッセージを入力して下さい" , size: 70, class:"form-text-field" %> 33 <%= f.hidden_field :room_id, value: @room.id %> 34 <%= f.submit "送信",class:"form-submit"%> 35 <% end %> 36 </div> 37</div>
routes.rb
ruby
1Rails.application.routes.draw do 2 devise_for :users 3 root to: "profiles#index" 4 resources :profiles 5 resources :users, only: [:edit, :update] 6 resources :messages, only: [:create] 7 resources :rooms, only: [:create, :show] 8end
messages.rb
ruby
1create_table :messages do |t| 2 t.text :message 3 t.references :profile, null: false, foreign_key: true 4 t.references :room, null: false, foreign_key: true 5 t.timestamps 6end
room_users.rb
ruby
1create_table :room_users do |t| 2 t.references :profile, null: false, foreign_key: true 3 t.references :room, null: false, foreign_key: true 4 t.timestamps 5end
自分で調べたことや試したこと
エラー画面が出なかったので、ターミナルログを見るとパラメーターに情報は入っているものの、createのところでrollbackされていました。paramsやカラムの表記を確認しましたが原因を見つけられず、302ステータスコードについても見てみましたが結局よくわかりませんでした。どなたかお力をお貸しいただければ幸いです。
使っているツールのバージョンなど補足情報
Rails 6.0.0
Ruby 2.6.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/29 08:32
2022/04/29 08:47
2022/04/29 08:49
2022/04/29 11:20 編集
2022/04/29 11:22
2022/04/29 11:54
2022/04/29 12:27
2022/04/29 13:26
2022/04/29 13:52 編集
2022/04/29 14:11
2022/04/29 14:36
2022/04/30 02:40