gpt4 book ai didi

ruby-on-rails - 使用 Action 电缆时如何使状态保持一致

转载 作者:行者123 更新时间:2023-12-03 13:10:11 25 4
gpt4 key购买 nike

假设我们使用诸如current_user之类的东西,它是ServiceClass的实例,其中包含用户模型, session 参数和其他信息。
事实是,在与websocket连接期间设置了变量,并且该变量可用于不同订阅上的所有AC调用。

然后,在某个时候用户决定更新其用户名,我们调用current_user.update(new_username),它可以正常工作。

但是该用户下的其他AC订阅仍然使用旧的用户模型。我想由于每个订阅都在各自的线程下工作,因此在一个线程下更新用户模型不会在其他线程下更新它们。这种情况下最好的方法是什么?

class ServiceClass

def initialize(session,...)
@session = session
@user = current_user
end

def update!(username)
@user.username = username
@user.save!
end

...
end

module ApplicationCable
class Channel < ActionCable::Channel::Base
def current_user
@current_user ||= ServiceClass.new(session, user)
end
end
end

最佳答案

您想要做的是向current_user广播,并让current_user订阅他/她的流。

在您的 Controller 中:

ActionCable.server.broadcast "#{current_user}"

在您的 channel 中(例如app/channels/user_channel.rb)
class UserChannel < ApplicationCable::Channel  
def subscribed
stream_from "#{current_user}"
end
end

关于ruby-on-rails - 使用 Action 电缆时如何使状态保持一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37147593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com