前提・実現したいこと
Rails6にてメッセージの投稿機能を実装中です。
非同期通信を伴わない投稿機能は問題なく実装できています。
今回はform_withのヘルパーメソッドでremote: trueとし、create.js.erbに処理を記述する方法を取っています。しかし、投稿後の非同期処理でエラーが出てしまい、困っています。知恵をお貸しください。
発生している問題・エラーメッセージ
デベロッパーツールのconsoleにて
POST http://localhost:3000/rooms/2/messages 500 (Internal Server Error)
該当のソースコード
app/views/messages/index.html
ruby
1<div class="wrapper"> 2 <div class="chat"> 3 <%= render "main_meeting" %> #部分テンプレートにて投稿一覧と投稿フォームを実装 4 </div> 5</div>
app/views/messages/_main_meeting
ruby
1<div class="messages"> 2 <%= render partial: 'message', collection: @messages %> #投稿一覧 3</div> 4 5<%= form_with model: [@room, @message], class: 'form', remote: true do |f| %> #投稿フォーム 6 <div class="form-input"> 7 <%= f.text_field :content, class: 'form-message', placeholder: 'type a message' %> 8 </div> 9 <%= f.submit '送信', class: 'form-submit' %> 10<% end %> 11
app/views/messages/index.html ※ここの記述が怪しいと考えています
ruby
1$(".messages").html("<%= j(render partiall: 'message', collection: @messages) %>");
app/controllers/message_controller ※messageはroomとuserに紐づいています
ruby
1def create 2 @rooms = Room.all 3 @room = Room.find(params[:room_id]) 4 @message = @room.messages.new(message_params) 5 @messages = Message.all 6 if @message.save 7 else 8 @messages = @room.messages.includes(:user) 9 render :index 10 end 11end
routes.rb
ruby
1Rails.application.routes.draw do 2 devise_for :users 3 root to: "rooms#index" 4 resources :users, only: [:edit, :update] 5 resources :rooms do 6 resources :messages, only: [:index, :create] 7 end 8end
試したこと
①create.js.erbに以下を記述して、処理がされているかを検証
ruby
1console.log("ok") 2console.log("<%= @message.content %>")
結果:問題なく表示された
考察:入力値の保存はできている。また、送信ボタンを押した際、create.js.erbの処理へときちんと移っている。
②エラーを無視して、画面をリロード
結果:入力した内容が投稿されている
考察:やはりcreate.js.erbの
$(".messages").html("<%= j(render partiall: 'message', collection: @messages) %>");
の部分に何か間違いがある。
補足情報(FW/ツールのバージョンなど)
Railsのバージョン…6.0.0
jqueryのバージョン…3.6.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/06 11:23
2021/04/07 00:04
2021/04/07 00:13