Я пытаюсь создать чат между двумя друзьями в рельсах 5 с помощью кабеля действия, но сообщение просматривают все пользователи, которые находятся в друзьях или нет

В канале

javascripts / канал / message.js

App.message = App.cable.subscriptions.create('MessageChannel', {  
  received: function(data) {

    return $('#messages').append(this.renderMessage(data));
  },
  renderMessage: function(data) {
    return "<p> <b>" + data.message + "</p>";
  }
});

Маршруты

  post 'messages/chat_create/:friendship_id/:friend_id' =>'messages#chat_create' , as:"chat_create"

Мой чат-контроллер

класс MessagesController ‹ApplicationController

def chat_create

        @chat = current_user.messages.new(msg: params[:message][:msg],friend_id:params[:friend_id])


        if @chat.save
            ActionCable.server.broadcast 'message_channel',message: @chat.msg
            redirect_to chat_path(params[:friendship_id])
        end
    end

сообщения / chat.html.erb

<div id="messages">

<%=form_for :message, url: chat_create_path(params[:friendship_id],params[:friend_id]) , method: :post  do |f|%>
<%=f.text_field :msg %>
<%=f.submit%>
<%end%>

</div>

Как я могу это улучшить. Пожалуйста, дайте мне решения


person manish gupta    schedule 20.07.2016    source источник
comment
См. http://stackoverflow.com/questions/37317317/actioncable-one-channel-per-user   -  person max pleaner    schedule 20.07.2016
comment
Я перешел по указанной вами ссылке, но это не работает. @maxpleaner   -  person manish gupta    schedule 20.07.2016
comment
Это не очень простая проблема, с которой вы столкнулись. Вероятно, это не будет решением «вырезать и вставить». Я уверен, что люди будут готовы помочь, если вы обновите свой вопрос с помощью последней попытки.   -  person max pleaner    schedule 20.07.2016


Ответы (1)


Модель «Канал, Соединение и Подписки» ActionCable IIUC использует одно Соединение. Несколько каналов могут транслироваться, но Пользователь видит только данные, отправленные только по Подписанным каналам.

Поэтому, если вы хотите создать чат между двумя друзьями, это похоже на создание частного канала, поэтому в своем методе chat_create вы можете попробовать это

ActionCable.server.broadcast "message_channel_#{current_user.id}_#{params[:friend_id]}"

в основном вы хотите вести трансляцию на частном канале. Очевидно, чтобы это сработало, вам необходимо подписать обоих пользователей / друзей на один и тот же частный канал.

person Daya Sharma    schedule 13.02.2017