我在网上广泛搜索(包括阅读 ActionCable
的许多代码示例),似乎是对一个非常基本问题的答案。唉,我还没有解决我的问题。
假设,我有一个模型 Search
我已经导航到 URL /searches/1
.
我也会有 search.coffee
文件下 javascripts/channels/
开头是:
App.instance = App.cable.subscriptions.create 'SearchChannel'
和一个
SearchChannel
看起来像这样的类:class SearchChannel < ApplicationCable::Channel
def subscribed
search = Search.find(params[:id])
stream_for search
end
def unsubscribed
end
end
自然,上面的代码会产生错误,因为
params[id]
是 nil
.以下是我的问题:
Search
基于 URL 的实例? SearchChannel
如果我在另一个不需要订阅的 URL 上,例如/searches/1/results
? 谢谢你的帮助!
最佳答案
如果您查看 ActionCable.Subscriptions#create
的实现,它可以通过两种方式调用。
选项 1(带 channel 名称):
App.cable.subscriptions.create 'SearchChannel'
选项 2(带 channel 对象):
App.cable.subscriptions.create channel: 'SearchChannel', id: 'Best Room'
如果您使用选项 1,在内部,它会被转换为 channel 对象。
所以,如果你想捕获
id
在服务器端,您需要使用第二个选项并通过 id
的search
,那么您应该能够按照您的描述在服务器端捕获它:class SearchChannel < ApplicationCable::Channel
def subscribed
search = Search.find(params[:id])
stream_for search
end
def unsubscribed
end
end
引用 Client-Server Interactions and Subsciptions了解更多信息。
关于ruby-on-rails-5 - Ruby on Rails 5 Action 电缆 : stream for current model instance (URL-based subscriptions),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39172299/