Rails Action Cable:如何访问 ApplicationCable::Channel Class 中的实例变量?
Rails Action Cable: How can I access instance variables within ApplicationCable::Channel Class?
我想为每个产品页面创建聊天室,以便用户可以在与其他产品的讨论隔离的同时谈论该产品。
为了这个目的;我计划在定义订阅时使用@product instance 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
如何访问通道模块中的实例变量?
我认为您不能在定义订阅时访问实例变量。但是你可以传递 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
在您的 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
我想为每个产品页面创建聊天室,以便用户可以在与其他产品的讨论隔离的同时谈论该产品。
为了这个目的;我计划在定义订阅时使用@product instance 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
如何访问通道模块中的实例变量?
我认为您不能在定义订阅时访问实例变量。但是你可以传递 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
在您的 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