ActionCable подключается к каналу, только если вызвано действие контроллера - PullRequest
0 голосов
/ 01 октября 2018

В моем проекте Ruby on Rails у меня есть контроллер InboxController, который имеет действие conversation, связанное с запросом get, для которого в качестве параметров необходимо указать user_phone и short_code:

class InboxController < ApplicationController
  def conversation
    @short_code = params[:short_code]
    @user_phone = params[:user_phone]
  end
end

Моя цель - показать во внешнем интерфейсе, сколько пользователей смотрят разговор, используя короткий код @short_code и user_phone user_phone.То есть сколько пользователей смотрят на страницу, связанную с InboxController#conversation в режиме реального времени.

Для этого, я думаю, я должен начинать потоковую передачу только тогда, когда установлены @short_code и @user_phone.Оба эти параметра являются строками.

У меня есть conversation_channel.rb файл:

class ConversationChannel < ApplicationCable::Channel
  def subscribed
    # stream_from "some_channel"
    if current_user && @short_code && @user_phone
      byebug
       puts "current_user is #{current_user} and short code is #{@short_code} and user_phone is #{@user_phone}"
      stream_from "conversation_channel_#{@short_code+'&'+@user_phone}"
    end
  end

  def unsubscribed
    # Any cleanup needed when channel is unsubscribed
  end

  def conversation
  end
 end

Мой conversation.coffee файл:

App.conversation = App.cable.subscriptions.create "ConversationChannel",
  connected: ->
  # Called when the subscription is ready for use on the server
    console.log('connected in conversation channel')

  disconnected: ->
    # Called when the subscription has been terminated by the server

  received: (data) ->
    # Called when there's incoming data on the websocket for this channel
     console.log('received in conversation channel')

   conversation: ->
     @perform 'conversation'

Бибуг в ConversationChannel никогда не попадет даже@short_code и @user_phone были установлены в InboxController#conversation, и я удостоверился, что они были установлены, потому что я был на странице этого.Но current_user был установлен правильно, и я мог получить к нему доступ, используя byebuging только с if current_user.

Я попытался вызвать stream_from "conversation_channel_#{@short_code+'&'+@user_phone}" после установки @short_code и @user_phone в коде моего контроллера, но получил ошибку undefined method stream_from 'для # `

Я уверен, что мой ActionCable установленвверх правильно, так как у меня есть другой канал, и этот канал работает правильно.

Какой правильный подход к этому?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...