您的訂閱創建傳遞一個roomId在javascripts/channels/room.js
:
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);
});
};
在channels/room_channel.rb
變得可作爲訂購創建一個參數,而說話的動作也只是所謂正確的數據:
:
def subscribed
stream_from "room_channel_#{params[:roomId]}"
end
def speak(data)
Message.create! text: data['message'], room_id: data['roomId']
end
然後,如果你從工作中廣播
def perform(message)
ActionCable.server.broadcast "room_channel_#{message.room_id}", message: render_message(message)
end
真棒謝謝你今晚試試吧 –
當你有多個聊天室時,這是如何工作的?如何使用您的示例訂閱roomA和roomB並根據用戶是否擁有訪問權限在服務器上對其進行授權? –
然後如何將@ room.id從控制器傳遞到room.js? – icemelt