我发布的类似问题: Updating attribute automatically in rails
我对Rails和JS非常陌生。我最近开始构建Web应用程序,但遇到了一些困难。我已经发布了一些相关的问题,但没有得到我想要的解决方案。
我的情况:
我想做的是,当用户A将用户B检查为静音时,用户B在用户A的朋友列表上消失了一段时间(10分钟或20分钟)。
数据结构:
我有一个User
模型,该模型具有一个名为boolean attribute
的{{1}}。从列表中选择用户后,mute
被设置为mute
作为默认值,并且false
被更新为mute
。
主要问题:
我做了一些我打算建造的东西,但我不知道 如何在一段时间后再次将
true
更新为mute
。是 反正有完成吗?我搜索了一些信息和一些 人们说每当使用宝石,但我不认为这不是我想要的。非常感谢您的帮助。再次感谢。
答案 0 :(得分:1)
您可以使用后台进程,当将mute
字段更新为true
时,可以在配置的时间后触发该后台进程。在此过程中,您可以将字段更新回false
。
一些例子是延迟的工作, Backburner , Redis 等。
答案 1 :(得分:0)
您需要再添加一列存储时间muted_at
的列,当用户A静音时,用户B的Mute值变为false,并且Muted_at将为DateTime.current。在调度程序作业中,您可以每5秒检查一次静音时间是否大于30分钟。如果超过20分钟,则将值更改为false。
您可以将gem sidekiq用于后台作业,gem sidekiq-scheduler用于计划作业
根据您的情况,您可以创建一个工作程序类,每隔5秒检查一次,是否需要更改静音值
:schedule:
hello_world:
cron: '0 * * * * *' # Runs once per minute
class: HelloWorld
HelloWorld将是您的工作,每1分钟运行一次,并检查静音时间是否超过当前时间
条件如下所示
User.last.update_column(mute:, false) if muted_at + 20.minutes < DateTime.current
因此,您可以通过这种方式解决问题。让我知道您是否需要更多信息
答案 2 :(得分:-1)
您可以使用以下代码:
setTimeout(function() {
// code
}, 1000);
其中为1000毫秒