Rails操作电缆:如何访问ApplicationCable :: Channel类中的实例变量?

时间:2018-10-07 21:11:48

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

我想在每个产品页面上创建聊天室,以便用户可以在与其他产品的讨论区分开的同时谈论该产品。

为此目的;我打算在定义订阅时使用@product实例varialbe,但似乎是这样;实例变量在Action Cable

中不可访问

“ app / channels / product_channel.rb”

class ProductChannel < ApplicationCable::Channel
  def subscribed
    stream_from "room_channel_product_#{@product.id}"
  end

  def unsubscribed
  end
end

如何访问通道模块中的实例变量?

2 个答案:

答案 0 :(得分:1)

我认为您在定义订阅时无法访问实例变量。但是您可以将product_id作为参数传递,然后订阅ProductChannel。 https://guides.rubyonrails.org/action_cable_overview.html#subscriber

App.cable.subscriptions.create { channel: "ProductChannel", product_id: your_product_id }

在您的频道上,您可以访问“ product_id”,例如:

def subscribed
  stream_from "product_channel_#{params[:product_id]}"
end

答案 1 :(得分:1)

subscribed方法中声明变量。将subscribed方法视为您频道的上下文中的初始化程序。

exists within the ActionCable codebase本身就是一个示例。在您的情况下,可以像这样

class ProductChannel < ApplicationCable::Channel
  def subscribed
    @product = Product.find(params[:product_id])
    stream_from "room_channel_product_#{@product.id}"
  end

  def unsubscribed
  end

  def foo
    @product.do_stuff
  end
end