我想在每个产品页面上创建聊天室,以便用户可以在与其他产品的讨论区分开的同时谈论该产品。
为此目的;我打算在定义订阅时使用@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
如何访问通道模块中的实例变量?
答案 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