eine roomId in javascripts/channels/room.js
auf Ihrem Abonnement Schaffung Pass ist:
MakeMessageChannel = function(roomId) {
// Create the new room channel subscription
App.room = App.cable.subscriptions.create({
channel: "RoomChannel",
roomId: roomId
}, {
connected: function() {},
disconnected: function() {},
received: function(data) {
return $('#messages').append(data['message']);
},
speak: function(message, roomId) {
return this.perform('speak', {
message: message,
roomId: roomId
});
}
});
$(document).on('keypress', '[data-behavior~=room_speaker]', function(event) {
if (event.keyCode === 13) {
App.room.speak(event.target.value, roomId);
event.target.value = "";
event.preventDefault();
}
return $('#messages').animate({
scrollTop: $('#messages')[0].scrollHeight
}, 100);
});
};
In channels/room_channel.rb
es als Parameter für das Abonnement Erstellung verfügbar wird, und die spricht Aktion war auch nur mit den richtigen Daten genannt:
def subscribed
stream_from "room_channel_#{params[:roomId]}"
end
def speak(data)
Message.create! text: data['message'], room_id: data['roomId']
end
Und dann, wenn Sie von einem Job sind Rundfunk:
def perform(message)
ActionCable.server.broadcast "room_channel_#{message.room_id}", message: render_message(message)
end
genial danke werde es heute Abend versuchen –
Wie funktioniert das, wenn Sie mehrere Chatrooms haben? Wie abonniere man roomA und roomB und autorisiere sie auf dem Server, basierend darauf, ob ein Benutzer Zugang zu einem Raum hat, mit Ihrem Beispiel? –
dann wie @ room.id vom Controller an room.js übergeben? – icemelt