В моем проекте 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 установленвверх правильно, так как у меня есть другой канал, и этот канал работает правильно.
Какой правильный подход к этому?