[JAVA] Sofort aktualisierte Chat-Funktion (Implementierung des Aktionskabels)

Chat-App, die sofort aktualisiert wird

Ich werde den Code alle zusammen verschieben ⬇︎

Terminal


% cd projects
% rails _6.0.0_ new mini_talk_app -d mysql
% cd mini_talk_app
% rails db:create

Terminal


% rails g controller messages new
% rails g model message text:text
% rails db:migrate

app/config/routes.rb


Rails.application.routes.draw do
  root 'messages#new'
  resources :messages, only: [:create]
end

app/controllers/messages_controller.rb


class MessagesController < ApplicationController
  def new
    @messages = Message.all
    @message = Message.new
  end

  def create
    @message = Message.new(text: params[:message][:text])
  end
end

java:app/views/messages/new.html.erb


<h3>mini_talk_app</h3>
<%= form_with model: @message do |f| %>
  <%= f.text_field :text %>
  <%= f.submit 'Senden' %>
<% end %>
<div id='messages'>
  <% @messages.reverse_each do |message| %>
    <p><%= message.text %></p>
  <% end %>
</div>

An diesem Punkt sollte es so aussehen

d6806db02ad04b485928bbd124c73f1a.png

Implementierung des Aktionskabels (Fortsetzung von früher)

Terminal


% rails g channel message

app/channel/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

app/controller/messages_controller.rb


class MessagesController < ApplicationController
  def new
    @messages = Message.all
    @message = Message.new
  end

  def create
    @message = Message.new(text: params[:message][:text])
    if @message.save
      ActionCable.server.broadcast 'message_channel', content: @message
    end
  end
end

app/javascript/channels/message_channel.js


import consumer from "./consumer"

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 html = `<p>${data.content.text}</p>`;
    const messages = document.getElementById('messages');
    const newMessage = document.getElementById('message_text');
    messages.insertAdjacentHTML('afterbegin', html);
    newMessage.value='';
  }
});

Das ist alles von der Szene!

Recommended Posts

Sofort aktualisierte Chat-Funktion (Implementierung des Aktionskabels)
Implementierung der Suchfunktion
Implementierung der Pagenationsfunktion
Implementierung der sequentiellen Suchfunktion
Implementierung einer ähnlichen Funktion (Ajax)
[Rails] Implementierung der Kategoriefunktion
Implementierung der Kategorie-Pulldown-Funktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung der CSV-Importfunktion
[Rails] Implementierung der Bildvorschau
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
Implementierung einer ähnlichen Funktion in Java
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Wo die Follow-Funktion implementiert ist
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
[Ruby on Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung einer Validierung, die die Eindeutigkeit beibehält
[Java] Wo befindet sich die Implementierungsklasse der Annotation, die in BeanValidation vorhanden ist?
Implementierung von vertikalem und horizontalem Scrollen, wie es in letzter Zeit häufig bei Android zu sehen ist