有没有办法从服务器端( Controller )终止对任何特定消费者的特定 channel 的订阅,以便可以调用我的 CoffeeScript 文件中的断开连接回调?
最佳答案
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/