ruby-on-rails-5 - Ruby on Rails 5 Action 电缆 : stream for current model instance (URL-based subscriptions)

标签 ruby-on-rails-5 actioncable

我在网上广泛搜索(包括阅读 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在服务器端,您需要使用第二个选项并通过 idsearch ,那么您应该能够按照您的描述在服务器端捕获它:
    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/

    相关文章:

    ruby-on-rails - Ruby on Rails where_values 方法

    mysql - 如何在 Ruby on Rails 中访问远程数据库数据?

    javascript - turbolinks :load event not firing on remote true call, rails ,jquery

    javascript - 如何保持与使用从客户端传递到 ActionCable 服务器的参数的 channel 的连接?

    javascript - Ruby on Rails、ActionCable、消息不显示

    ruby-on-rails - 哪个 rails vs rails -v vs 哪个 ruby

    ruby-on-rails - 如何在 factory_bot 工厂中添加额外数据以连接表

    ruby-on-rails - Rails 5 安全操作电缆与 redis

    ruby-on-rails - 具有实时通知架构的 Rails

    ruby-on-rails - 通过 API 创建新对象时呈现部分