こんにちは私はアクションケーブルで基本的なチャットルームをセットアップしていて、チャットに投稿中に現在のユーザーに一時的なユーザー名を与える方法があるのだろうかルーム?彼らがチャットすることが許可される前に、彼らは彼らのユーザー名を入力する必要があるように設定することをお勧めしますか?アクションケーブルチャットボックスに一時的なユーザー名を追加する方法はありますか
ここでは、高度な
のおかげで、私が持っているコード:
これは図である。
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']
end
end
メッセージ放送の仕事:
<h1>Chat room</h1>
<div id="messages">
<%= render @messages %>
</div>
<form>
<label>Say something:</label><br>
<input type="text" data-behavior="room_speaker">
</form>
これは部屋のチャンネルです:
class MessageBroadcastJob < ApplicationJob
queue_as :default
def perform(message)
ActionCable.server.broadcast 'room_channel', message: render_message(message)
end
private
def render_message(message)
ApplicationController.renderer.render(partial: 'messages/message', locals: { message: message })
end
end
とコーヒースクリプト:ここ
App.room = App.cable.subscriptions.create "RoomChannel",
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) ->
$('#messages').append data['message']
speak: (message) ->
@perform 'speak' , message: message
$(document).on 'keypress', '[data-behavior~=room_speaker]', (event) ->
if event.keyCode is 13
App.room.speak event.target.value
event.target.value = ''
event.preventDefault();
は私のコントローラである:
class RoomsController < ApplicationController
def index
@messages = Message.all
end
end
私はレンダリングのページ:
<div class="message">
<p><%=message.content%></p>
</div>
おかげで、のようなユーザ名を持っています ルームチャンネルクラッセの話す
にそして、あなたの部屋チャンネルにメッセージと同様に沿ってユーザ名を送信私は実際にどこにパラメータを送信しているのですか?すみません、私はこれに初めてです – dave
@daveあなたのチャットフォームが正しくレンダリングされているコントローラがありますか?あなたはそれのコードを表示することができます – krishnar
コードの余分なビットが追加されました – dave