Как передать идентификатор элемента в кабельную подписку? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть ActionCable, настроенный и работающий с обычным каналом сообщений.Однако мне нужно ограничить количество подписок на канал одним сообщением.Как мне передать message_id в подписку?

У меня есть атрибут данных, содержащий message_id, который просматривается / подписывается.

comment_channel.js

import consumer from "./consumer"
var get_id = $('#messages').data('message-id')

consumer.subscriptions.create({
  channel: "CommentChannel", message_id: get_id

}, {

 connected() {
 console.log('connected to the comment channel')
},

disconnected() {
console.log('disconnected to the comment channel')
},

received(data) {
  console.log(data);
  $('section#comments').append(data['comment']);
}
});

CommentChannel

class CommentChannel < ApplicationCable::Channel
  def subscribed
    # stream_from "message_comments"
    # params['message_id'] should get passed in as subscription.create param
    stream_from "message:#{ params['message_id'] }:comments"
  end

  def unsubscribed
  end
end

CommentJob

class CommentRelayJob < ApplicationJob
  def perform(comment)
    ActionCable.server.broadcast("message:#{ comment.message_id }:comments", comment: CommentsController.render(partial: 'comments/comment', locals: { comment: comment }))
  end
end

Приведенный выше get_id завершается с

 comment_channel.js:6 Uncaught ReferenceError: $ is not defined

Как я могу ограничить подписку на конкретное сообщение?

1 Ответ

0 голосов
/ 24 мая 2019

В итоге я взял идентификатор URL с помощью

var pathArray = window.location.pathname.split('/');
var secondLevelLocation = pathArray[2];

и затем сбросил его в качестве параметра для подписки

consumer.subscriptions.create({ 
  channel: "CommentChannel", 
  message_id: secondLevelLocation
}, ...

, насколько я могу судить, вы можете 'использовать обратный вызов ready () в этом файле ... независимо от того, что я пробовал, это привело к ошибке.

...