ruby-on-rails - 如何终止服务器对可操作 channel 的订阅?

标签 ruby-on-rails ruby-on-rails-5 channel actioncable

有没有办法从服务器端( Controller )终止对任何特定消费者的特定 channel 的订阅,以便可以调用我的 CoffeeScript 文件中的断开连接回调?

最佳答案

http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests

class ChatChannel < ApplicationCable::Channel
  def subscribed
    @room = Chat::Room[params[:room_number]]
    reject unless current_user.can_access?(@room)
  end
end

在调用reject之前,您还可以告知订阅者拒绝的原因:

class ChatChannel < ApplicationCable::Channel
  def subscribed

    if params["answerer"]

      answerer = params["answerer"]

      answerer_user = User.find_by email: answerer

      if answerer_user

        stream_from "chat_#{answerer_user}_channel"    

      else

        connection.transmit identifier: params, error: "The user #{answerer} not found."

  # http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests

        reject

      end

    else

        connection.transmit identifier: params, error: "No params specified."

  # http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests

        reject

    end     

  end
end

关于ruby-on-rails - 如何终止服务器对可操作 channel 的订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39815216/

相关文章:

go: 在 select 和 break 中过滤事件

go - 直接从一个 channel 发送到另一个 channel

go - Go 中 channel 的类型别名工作得很奇怪

ruby-on-rails - foo.try(& :to_s?) 和 foo.try(:to_s?) 有区别吗

ruby-on-rails - 如何在 Ubuntu 16.04.3 上安装 nokogiri 1.7.0.1?

ruby-on-rails - 抽佣 Assets :precompile fails all of a sudden

sql - MONTH AND YEAR 的 Rails Sql 查询

ruby-on-rails - 如何将临时文件编写为二进制文件

ruby-on-rails - 运行 Rake 测试时出现 404 错误

mysql - 我应该在 Ruby on Rails 中使用非标准化字段来表示未偿金额吗