一定时间后,在Rails中自动更新布尔属性

时间:2018-08-21 11:13:15

标签: ruby-on-rails

我发布的类似问题Updating attribute automatically in rails

我对Rails和JS非常陌生。我最近开始构建Web应用程序,但遇到了一些困难。我已经发布了一些相关的问题,但没有得到我想要的解决方案。

我的情况:

我想做的是,当用户A将用户B检查为静音时,用户B在用户A的朋友列表上消失了一段时间(10分钟或20分钟)。

数据结构:

我有一个User模型,该模型具有一个名为boolean attribute的{​​{1}}。从列表中选择用户后,mute被设置为mute作为默认值,并且false被更新为mute

主要问题:

  

我做了一些我打算建造的东西,但我不知道   如何在一段时间后再次将true更新为mute 。是   反正有完成吗?我搜索了一些信息和一些   人们说每当使用宝石,但我不认为这不是我想要的。非常感谢您的帮助。再次感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用后台进程,当将mute字段更新为true时,可以在配置的时间后触发该后台进程。在此过程中,您可以将字段更新回false

一些例子是延迟的工作 Backburner Redis 等。

https://github.com/collectiveidea/delayed_job

https://github.com/nesquena/backburner

答案 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毫秒