2017-08-30 29 views
2

即时通过rails webapp构建ruby,用户可以邀请对方参加不同的活动。如果此用户收到邀请参加不到10天的活动,我想向用户发送通知。我知道,我可以轻松地通过检查用户是否收到并邀请参加不到10天的活动。 (RoR)

invite.date - 10.days < Date.now 

执行此检查,但我想不通的时候进行这样的检查,或在哪里放置(在一个控制器,一个帮手,JavaScript的?)......每次用户进入网站时是否都要执行此检查,即使每个用户都可以有很多邀请?或者,我想在发送邀请后直接排队通知,即使通知要在几天/周内发送。至少对我而言,将这些东西放在RoR中并不明显。我希望我的问题是有道理的...

在此先感谢!

+0

您需要定期执行某个逻辑。由于您的“时间单位”是一整天,因此您可以每天在12点运行一次佣金任务,这将在10天内获得有关某个事件的所有邀请,并向最终用户发送电子邮件。您可能希望存储这些信息(通过电子邮件发送的邀请),这样您就不会每天都向最终用户发送垃圾邮件。 – MrYoshiji

回答

2

您将要设置一个cronjob。有几个宝石,可以很容易地检查这些东西,如clockwork

有了这个宝石,你会设置一个时间表来运行假设每隔一小时喜欢

every(1.hour, "Check for people to send invites to") do 
    User.invitable.each { |u| u.send_notification! } 
end 

这只是一个小例子。主要的一点是,一个cron作业可以反复运行多长时间。在这种情况下,它会每小时运行一次,寻找需要邀请的用户。如果您决定使用发条,您需要阅读文档以了解更多您可以执行的操作。

+0

谢谢你的回答,发条似乎是解决这个问题的一个非常方便的方法! – user1621127

0

当然,您可以随时安装宝石(无论何时或发条),但如果您想知道如何安装,无需安装任何东西。首先创建一个名为“events.rake”的文件,并将其放置在名为'tasks'的文件夹中,并将其放在lib文件夹中。在文件中使用类似的代码:

namespace :events do 
    task :daily_event_check => :environment do 
    (Your code here) 
    end 
end 

然后转到您的终端和crontab -e命令。输入以下代码:

0 0 * * * /bin/bash -l -c 'cd /path/to/your/app && RACK_ENV=(your preferred environment) bundle exec rake events:daily_event_check --silent' 

然后保存。这将在午夜每晚运行你的代码。如果你更喜欢不同的时间,查找crontab,它会有时间设置的全面细分。这应该让你去。

相关问题