前提・実現したいこと
ActionCable(JQueryは使用してません)でリアルタイムチャットアプリを作成しています。
メッセージを送信すると、ユーザーアイコン、ユーザー名、投稿日時、投稿内容を非同期で表示させようと思っています。
発生している問題・エラーメッセージ
チャット画面でユーザー名や投稿日時、投稿メッセージまでは非同期で表示できているのですが、
ユーザーアイコン画像をJavaScriptで取得できず表示ができません。
ユーザーアイコン画像はactivestorageを用いてUserモデルに紐づけており、
ビューファイルでは取得できているため、リロードすればユーザー画像は表示されるのですが、
リロードしないと、反映されない状態です。
const image = <p>${data.user.image}</p>
;は
javascriptで取得できないものなのでしょうか??
該当のソースコード
controller
1 def create 2 @place = Place.find(params[:place_id]) 3 @message = Message.new(params_message) 4 @messages = @place.messages.includes(:user) 5 @user = User.find_by(id: current_user.id) 6 if @message.save 7 ActionCable.server.broadcast 'message_channel', content: @message, user: @user 8 else 9 render :new 10 end 11 end
javascript
1import consumer from "./consumer" 2 3consumer.subscriptions.create("MessageChannel", { 4 connected() { 5 // Called when the subscription is ready for use on the server 6 }, 7 8 disconnected() { 9 // Called when the subscription has been terminated by the server 10 }, 11 12 received(data) { 13 const text = `<p>${data.content.text}</p>`; 14 const createdAt = `<p>${data.content.created_at}</p>`; 15 const nickName = `<p>${data.user.nickname}</p>`; 16 const image = `<p>${data.user.image}</p>`; 17 const HTML = ` 18 <div class="message-content"> 19 <div class="message-icon"> 20 <img src="${image}" class="message-user-icon"> 21 </div> 22 <div class="message-name"> 23 <p>${nickName}</p> 24 </div> 25 <div class="created-at"> 26 <p>${createdAt}</p> 27 </div> 28 </div> 29 <div class="lower-message"> 30 <div class="text"> 31 <p>${text}</p> 32 </div> 33 </div>` 34 const messages = document.getElementById('messages'); 35 const newMessage = document.getElementById('message_text'); 36 messages.insertAdjacentHTML('afterbegin', HTML); 37 newMessage.value=''; 38 } 39}); 40
###問題の発生した環境
ruby 2.6.5
rails 6.0.3.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。