前提・実現したいこと
チャットルームWEBアプリを作っています。
ajaxを使って自動更新機能をつけ、
別のユーザが投稿したメッセージがあれば取得するという部分を実現したいです。
発生している問題・エラーメッセージ
現状、問題が発生しているのはrailsでのデータ取得だと考えています。
処理の流れは下記のようにしています。
①チャットルーム内だけ自動更新が走る判定(TOPやログイン画面で発火しないように)
↓
②このチャットルームの最後のメッセージのdata-idを取得(last_messageに代入)
↓
③ajaxで値を渡す
↓
④railsにて、last_message より大きいIDのメッセージを取得する
↓
⑤jsonで吐き出す
↓
⑥jqueryで値を受け取り、メッセージがあれば(lengthが0でなければ)、結果をフロントに反映(.append)
現在エラーが出ている箇所が④~⑥です。
④ → binding.pryにて確認したところ値がnilで返ってくる。
railsのapiの部分のデータの取得がうまくいってないため、その先が動作してません。
[参考]githubの該当リポジトリ
https://github.com/kaorioka/chat-space2
該当のソースコード
js
1var current_page = window.location.href; 2 3 var reloadMessages = function () { 4 5 if (current_page.match(//groups/\d+/messages/)) { 6 7 var last_message = $(".message:last").data("message-id") || 0; 8 9 $.ajax({ 10 url: "/api/messages", //request url 11 type: 'GET', 12 data: { 13 id: last_message, 14 group_id: current_group 15 }, 16 dataType: 'json' 17 }) 18 .done(function (message) { 19 20 console.log(`message:${message}`); 21 22 if (message.length != 0) { 23 var insertHTML = ''; 24 message.forEach(function (message) { 25 insertHTML += buildHTML(message); 26 }); 27 var list = ".messages"; 28 $(list).append(insertHTML); 29 send_scroll(list); 30 31 } else { 32 console.log("else"); 33 } 34 35 }) 36 .fail(function () { 37 alert('自動更新に失敗しました'); 38 }); 39 } else { 40 clearInterval(reloadMessages); 41 }; 42 };
json
1json.array! @messages do |message| 2 json.content message.content 3 json.image message.image.url 4 json.created_at message.created_at.strftime("%Y/%m/%d %H:%M") 5 json.user_name message.user.name 6 json.id message.id 7end
rb
1class Api::MessagesController < ApplicationController 2 def index 3 group = Group.find(params[:group_id]) 4 last_message_id = params[:id].to_i 5 @messages = group.messages.includes(:user).where("id >?", last_message_id) 6 end 7end
怪しそうな箇所のヒントだけでも良いので、ご意見いただきたく!
回答1件
あなたの回答
tips
プレビュー