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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

0回答

290閲覧

action cableを使用したメッセージ送信機能 メッセージ送信時[object object]と表示されてしまう。

Kondo93007118

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/03 07:45

解決したいこと

action cableを使用したリアルタイムチャット機能を作成しています。
Line風に左右に分けてメッセージをを送りたいです。
メッセージを送る際にDBに保存はできるのですが、リアルタイムで表示されるものが[object object]と表示されてしまいます。

#メッセージを送った際のターミナル表示
現在エラー文は出ていないため、ターミナルの表示を貼らせていただきます。

[ActiveJob] [MessageBroadcastJob] [33c3c825-011f-4345-aa4a-874492f390d0] ↳ app/views/messages/_message_right.html.erb:4 [ActiveJob] [MessageBroadcastJob] [33c3c825-011f-4345-aa4a-874492f390d0] Rendered messages/_message_right.html.erb (3.1ms) [ActiveJob] [MessageBroadcastJob] [33c3c825-011f-4345-aa4a-874492f390d0] Rendered messages/_message_left.html.erb (2.7ms) [ActiveJob] [MessageBroadcastJob] [33c3c825-011f-4345-aa4a-874492f390d0] [ActionCable] Broadcasting to room_channel: {:message_right=>"<div class=\"message\">\n <div class=\"kaiwa\">\n <figure class=\"kaiwa-img-right\">\n <img src=\"/uploads/user/image/6/GettyImages-522585140.jpg\" />\n <figcaption class=\"kaiwa-img-description\">\n nobi@nobi\n </figcaption>\n </figure>\n <div class=\"kaiwa-text-right\">\n <p>kkkkkkk</p>\n </div>\n </div>\n</div>", :message_left=>"<div class=\"message\">\n <div class=\"kaiwa\">\n <figure class=\"kaiwa-img-left\">\n <img src=\"/uploads/user/image/6/GettyImages-522585140.jpg\" />\n <figcaption class=\"kaiwa-img-description\">\n nobi@nobi\n </figcaption>\n </figure>\n <div class=\"kaiwa-text-left\">\n <p>kkkkkkk</p>\n </div>\n </div>\n</div>", :chat_user=>6} [ActiveJob] [MessageBroadcastJob] [33c3c825-011f-4345-aa4a-874492f390d0] Performed MessageBroadcastJob (Job ID: 33c3c825-011f-4345-aa4a-874492f390d0) from Async(default) in 698.58ms RoomChannel transmitting {"message_right"=>"<div class=\"message\">\n <div class=\"kaiwa\">\n <figure class=\"kaiwa-img-right\">\n <img src=\"/uploads/user/image/6/GettyImages-522585140.jpg\" />\n <figcaption class=\"kaiwa-img-description\">\n nobi@nobi\n </figcaption>\n </figure>\n <div... (via streamed from room_channel)

#該当ソースコード

room_channel.rb class RoomChannel < ApplicationCable::Channel def subscribed stream_from "room_channel" end def unsubscribed # Any cleanup needed when channel is unsubscribed end def speak(data) Message.create!(content: data['message'], user_id: current_user.id) end end
room.js App.room = App.cable.subscriptions.create("RoomChannel", { connected: function() { // Called when the subscription is ready for use on the server }, disconnected: function() { // Called when the subscription has been terminated by the server }, received: function(message) { const messages = document.getElementById('messages') messages.innerHTML += message console.log(messages) }, speak: function(content) { return this.perform('speak', {message: content}); } }); document.addEventListener('DOMContentLoaded',function(){ const input = document.getElementById('chat-input') const button = document.getElementById('button__chat') button.addEventListener('click',function(){ content = input.value App.room.speak(content) input.value = '' }) })
message_broadcast_job.rb class MessageBroadcastJob < ApplicationJob queue_as :default def perform(message) ActionCable.server.broadcast "room_channel", message_right: render_message_right(message), message_left: render_message_left(message),chat_user: @arguments[0].user_id end private def render_message_right(message) ApplicationController.renderer.render partial: 'messages/message_right', locals: { message: message } end def render_message_left(message) ApplicationController.renderer.render partial: 'messages/message_left', locals: { message: message } end end
rooms/show.html.erb <div class="chat"> <div class = "containar"> <div class="chat_box"> <div id = "messages"> <%= render @messages %> </div> </div> </div> </div> <footer class="form"> <div class ="bms__send"> <input type="text" class="bms__send__message" id="chat-input"/> <button id="button__chat" class="bms__btn__send">送信</button> </div>
_message.html.erb <div class="message"> <div class="kaiwa"> <% if message.user == current_user %> <% position = 'right' %> <% else %> <% position = 'left' %> <% end %> <figure class="kaiwa-img-<%= position %>"> <%= link_to "/users/#{message.user_id}" do %> <% if message.user.image? %> <%= image_tag message.user.image.url %> <% else %> <%= image_tag("no-image.png") %> <% end %> <% end %> <figcaption class="kaiwa-img-description"> <%= message.user.name %> </figcaption> </figure> <div class="kaiwa-text-<%= position %>"> <%= simple_format(message.content) %> <%= message.created_at%> </div> </div> </div>
_message_right.html.erb <div class="message"> <div class="kaiwa"> <figure class="kaiwa-img-right"> <% if message.user.image? %> <%= image_tag message.user.image.url %> <% else %> <%= image_tag("no-image.png") %> <% end %> <figcaption class="kaiwa-img-description"> <%= message.user.email %> </figcaption> </figure> <div class="kaiwa-text-right"> <%= simple_format(message.content) %> </div> </div> </div>
_message_left.html.erb <div class="message"> <div class="kaiwa"> <figure class="kaiwa-img-left"> <% if message.user.image? %> <%= image_tag message.user.image.url %> <% else %> <%= image_tag("no-image.png") %> <% end %> <figcaption class="kaiwa-img-description"> <%= message.user.email %> </figcaption> </figure> <div class="kaiwa-text-left"> <%= simple_format(message.content) %> </div> </div> </div>

#試したこと
room.jsでconsole.logを使用してデバッグしたところ

<div id="messages"> [object Object]</div>

上記のように表示されておりました。
メッセージが受け取れていないと思うのですが受け取る記述がわかりません。
ご教授いただけると幸いです。

#補足情報
rails /5.2.3
ruby /'2.5.1'

Qiita参考記事
https://qiita.com/eRy-sk/items/4c4e983e34a44c5ace27

必要な情報がございましたら追加させていただきます。
ご回答よろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問