Отключите и отмените подписку Action Cable on Rails 6 - PullRequest
2 голосов
/ 04 февраля 2020

Это уже спрашивалось здесь, но кажется, что старые методы ( пример и пример ) больше не работают на Rails 6, потому что вы не можете использовать App.channel внутри вашего app/javascript/channels/your_channel.js. Хотя, поправьте меня, если я ошибаюсь, потому что я новичок в Rails.

Мой вопрос: как отключить или / и отказаться от подписки со стороны клиента на Rails 6?

Я особенно интересует сценарий «при смене страницы».

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Не могли бы вы поделиться фрагментом кода, который у вас есть в вашем app/javascript/channels/your_channel.js?

Исходя из того, что вы нам сообщили, вы пытаетесь удалить подписку. Вы можете удалить его, используя consumer.subscriptions.remove [1] .

0 голосов
/ 04 февраля 2020

Решением было сохранить подписку на переменную this и выполнить вызов удаления, если эта переменная не равна нулю при загрузке страницы, а затем создать новую подписку.

// File: app/javascript/channels/your_channel.js
import consumer from "./consumer";

$(document).on('turbolinks:load', function() {
    if (this.subscription) {
        consumer.subscriptions.remove(this.subscription);
        console.log("unsubing");
    }

    if ($('#hashtag').attr('data-hashtag-id')) {
        var subscription = consumer.subscriptions.create({channel: "TweetsChannel", id: $('#hashtag').attr('data-hashtag-id')}, {
            connected() {
                console.log("we are live on: " + $('#hashtag').attr('data-hashtag-id'));
            },

            disconnected() {
                console.log("disconecting")
            },

            received(data) {
                $('#tweets-card').prepend(data.content)
            }
        });

        this.subscription = subscription;
    }
});
...