質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

950閲覧

jqueryを使って非同期通信で投稿機能を実装したい【Rails6】

tekeTECH

総合スコア8

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/04/06 00:06

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

partial では?

$(".messages").html("<%= j(render partial: 'message', collection: @messages) %>");

投稿2021/04/06 08:44

FKM

総合スコア3640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tekeTECH

2021/04/06 11:23

ありがとうございます。自分のタイプミスだったみたいでお恥ずかしい限りではありますが、煮詰まっていたので助かりました。無事実装できたので報告させて頂きます。
FKM

2021/04/07 00:04

Railsの500エラーは8割ぐらいはビューの中に発生するエラーというのが自分の経験です。その中で盲点になるのが、パーシャル部分ですね。
tekeTECH

2021/04/07 00:13

分かりました。500エラーに初めて出くわしたので少し戸惑ってしまい、質問する運びとなりました。今回のことを活かし、また同じようなことが起きた時にはビューファイルの見直しから行いたいと思います。 "Railsの500エラーは8割ぐらいはビューの中に発生するエラーというのが自分の経験です" こういったアドバイスはとても助かります。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問