解決したいこと
Ruby on Railsで対話型のラインのようなチャット機能をActionCableを使用して作成しています。
リアルタイムチャット自体は実装できたのですが、別ブラウザで機能確認を行ったところ、ログイン中のユーザーidがうまく取得できず、送信側の表示になってしまいます。リロードを行うと送信(右側)受信(左側)それぞれ正常な位置に戻ります。
送信者・受信者は、message_channel.jsファイルのreceived(date)で条件分岐を行っています。
どなたか解決方法をご教授いただきたいです。
発生している問題・エラー
下記Gifのような現象が発生しています。
リアルタイムチャット
該当するソースコード
javascript
1-- message_channel.js -- 2import consumer from "./consumer" 3 4consumer.subscriptions.create("MessageChannel", { 5 connected() { 6 // Called when the subscription is ready for use on the server 7 }, 8 9 disconnected() { 10 // Called when the subscription has been terminated by the server 11 }, 12 13 received(data) { 14 const nickName = `${data.user.nickname}` 15 const content = `${data.content.content}` 16 const messageData = `${data.time}` 17 const currentUser = `${data.user.id}` 18 const sendUser = `${data.content.user_id}` 19 if (currentUser == sendUser) { 20 const HTML = ` 21 <div class="my-content"> 22 <div class="my-message"> 23 <div class="my-message-date"> 24 ${messageData} 25 </div> 26 <div class="my-message-content"> 27 ${content} 28 </div> 29 </div> 30 </div> 31 ` 32 const messages = document.getElementById('message') 33 const newMessage = document.getElementById('content') 34 messages.insertAdjacentHTML('beforeend', HTML) 35 newMessage.value='' 36 } else { 37 const HTML = ` 38 <div class="content"> 39 <div class="upper-message"> 40 <div class="message-user"> 41 ${nickName} 42 </div> 43 </div> 44 <div class="lower-message"> 45 <div class="message-content" > 46 ${content} 47 </div> 48 <div class="message-date"> 49 ${messageData} 50 </div> 51 </div> 52 </div> 53 ` 54 const messages = document.getElementById('message') 55 const newMessage = document.getElementById('content') 56 messages.insertAdjacentHTML('beforeend', HTML) 57 newMessage.value='' 58 } 59 } 60});
ruby
1-- message_channel.rb -- 2class MessageChannel < ApplicationCable::Channel 3 def subscribed 4 stream_from 'message_channel' 5 end 6 7 def unsubscribed 8 # Any cleanup needed when channel is unsubscribed 9 end 10end
ruby
1-- application_cable/connection.rb -- 2module ApplicationCable 3 class Connection < ActionCable::Connection::Base 4 identified_by :current_user 5 6 def connect 7 self.current_user = find_verified_user 8 end 9 10 private 11 12 def find_verified_user 13 if verified_user = User.find_by(id: cookies.signed[:user_id]) 14 verified_user 15 else 16 reject_unauthorized_connection 17 end 18 end 19 end 20end
行ったこと
connection.rbでcurrent_userを定義しました。
解決したいこと
受信者と送信者のチャット画面でメッセージの表示位置を変えることができませんでした。
初学者のため拙いコードで申し訳ございませんが、どなたかご教授いただきたいです。
あなたの回答
tips
プレビュー