gpt4 book ai didi

ruby-on-rails - 使用后台任务软删除大型用户帐户

转载 作者:行者123 更新时间:2023-12-04 18:32:15 25 4
gpt4 key购买 nike

我正在使用 Rails 并设计一个存储大量用户数据的应用程序。我想让用户能够像 Facebook 那样停用他的帐户,这样如果您重新登录,您的帐户就会重新激活。到目前为止,我已经使用软删除解决了这个问题。问题是,当人们删除他们的帐户时,需要软删除的数据太多,需要一段时间才能运行。自然地,我的直觉是为此使用delayed_job。但问题是,这仅适用于帐户删除,不适用于重新激活。我不希望我的用户在他们的所有数据都恢复时必须坐 10 秒钟,但我也不能在后台执行此操作,因为那样他们将在他们的任何数据被恢复之前重新登录恢复。

关于如何解决这个问题的任何想法?

提前致谢!

最佳答案

您需要将 soft_delete 设置为在所有相关记录上作为 bool 标志进行跟踪。将默认范围设置为仅返回未设置标志的记录。当需要激活或停用时,请收集所有相关记录并使用 update_all .这是一个针对 13,000 条用户记录运行的示例,让您了解时间和性能:

1.9.2p320 :001 > User.update_all(soft_deleted: false)
SQL (1016.3ms) UPDATE "users" SET "soft_deleted" = 'f'
=> 13350

如您所见,它在大约一秒钟内使用该标志切换击中了所有 13,000 条记录。所以,如果你想点击一个用户,一个用户的所有帖子,以及一个用户的所有 PrivateMessages,
User.update_attributes(soft_deleted: true)
User.posts.update_all(soft_deleted: true)
User.private_messages.update_all(soft_deleted: true)

你应该很高兴。如果您要处理如此多的记录,甚至这种技术也不能很好地执行,我认为您将没有太多选择,除了告诉用户可能需要几分钟才能获得所有数据如您最初计划的那样,重新激活并将整个过程投入后台作业。

关于ruby-on-rails - 使用后台任务软删除大型用户帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890998/

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