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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Action Cable

Action Cableは、WebSocketをRailsに組み込む機能。Rails4でオプションとして存在していたWebSocketをRails5で標準機能したものです。Railsアプリケーションと同様のスタイルで、Rubyを用いたリアルタイム機能を記述できます。

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Q&A

0回答

966閲覧

ActionCableを用いて画像を送信する

syu_akita

総合スコア1

Action Cable

Action Cableは、WebSocketをRailsに組み込む機能。Rails4でオプションとして存在していたWebSocketをRails5で標準機能したものです。Railsアプリケーションと同様のスタイルで、Rubyを用いたリアルタイム機能を記述できます。

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

0グッド

0クリップ

投稿2021/01/26 13:36

編集2021/01/26 13:38

前提・実現したいこと

現在chatアプリを作成しています。
ActionCableを用いてチャットのテキストの内容、送信者の名前、作成時間の3つは非同期で送れるようになりました。
画像自体は送れていそうなのですがリロードしないと画像が表示できない状態です。

発生している問題・エラーメッセージ

エラーは出ていないのですが、送ったあとのブラウザの状態とリロードしたあとの画像を載せさせていただきます。
リロード前
https://gyazo.com/8337019a55c7d9beec25f3bb8500e38e
リロード後
https://gyazo.com/ed81a555e997ce2c8f4952bc0a55b2c4

該当のソースコード

view

1<div class="message" id="message"> 2 <div class="upper-message"> 3 <div class="message-user"> 4 <!-- 投稿したユーザー名情報を出力する --> 5 <%= message.user.name%> 6 </div> 7 <div class="message-date"> 8 <!-- 投稿した時刻を出力する --> 9 <%=l message.created_at%> 10 </div> 11 </div> 12 <div class="lower-message"> 13 <div class="message-content"> 14 <!-- 投稿したメッセージ内容を記述する --> 15 <%= message.content %> 16 </div> 17 <%= image_tag message.image.variant(resize: '500x500'), class: 'message-image' if message.image.attached? %> 18 </div> 19</div>

message_channel.js

import consumer from "./consumer" // import {formatToTimeZone} from 'date-fns-timezone'; consumer.subscriptions.create("MessageChannel", { connected() { // Called when the subscription is ready for use on the server }, disconnected() { // Called when the subscription has been terminated by the server }, received(data) { // const FORMAT = 'YYYY-MM-DD HH:mm:ss'; // const TIME_ZONE_TOKYO = 'Asia/Tokyo'; // const now = new Date(); const japanStandardTime = new Date().toLocaleString({ timeZone: 'Asia/Tokyo' }); const html = ` <div class="message"> <div class="upper-message"> <div class="message-user"> ${data.user.name} </div> <div class="message-date"> ${japanStandardTime} </div> </div> <div class="lower-message"> <div class="message-content"> ${data.content.content} </div> <img src="${data.image}"> </div> </div>`; const messages = document.getElementById('messages'); const newMessage = document.getElementById('message_content'); const newImage = document.getElementById('message_image'); messages.insertAdjacentHTML('beforeend', html); newMessage.value=''; newImage.value=''; } });

messages_controller.rb

class MessagesController < ApplicationController def index @message = Message.new @room = Room.find(params[:room_id]) @messages = @room.messages.includes(:user) end def create @room = Room.find(params[:room_id]) @message = @room.messages.new(message_params) if @message.save ActionCable.server.broadcast 'message_channel', content: @message, user: @message.user, image: @message.image # redirect_to room_messages_path(@room) else @messages = @room.messages.includes(:user) render :index end end private def message_params params.require(:message).permit(:content, :image).merge(user_id: current_user.id) end end

message_channel.rb

class MessageChannel < ApplicationCable::Channel def subscribed stream_from "message_channel" end def unsubscribed # Any cleanup needed when channel is unsubscribed end end

補足情報(FW/ツールのバージョンなど)

rails 6.0を使用しています

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問