【问题标题】:Disconnect and unsubscribe Action Cable on Rails 6断开并取消订阅 Action Cable on Rails 6
【发布时间】:2020-05-19 21:11:48
【问题描述】:
这已经在这里问过了,但似乎旧方法(example 和 example)不再适用于 Rails 6,因为您不能在 app/javascript/channels/your_channel.js 中使用 App.channel。
不过,如果我错了,请纠正我,因为我是 Rails 新手。
我的问题是:如何在 Rails 6 上断开或/和取消订阅客户端?
我对“页面更改”场景特别感兴趣。
【问题讨论】:
标签:
ruby-on-rails
actioncable
ruby-on-rails-6
【解决方案1】:
根据您与我们分享的内容,我想您正在尝试删除订阅。您可以使用 consumer.subscriptions.remove [1] 将其删除。
您能分享一下您在app/javascript/channels/your_channel.js 中的sn-p 代码吗?
【解决方案2】:
解决方案是将订阅保存在 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;
}
});