注册后 48 小时检查用户是否有餐厅
Check if user has restaurant 48hours after sign up
我很难检查我的用户是否在 signed_up 后 48 小时创建了餐厅(objective 是发送电子邮件提醒)。
我尝试了不同的东西,现在我在
用户模型:User.rb
after_create :reminder
def reminder
if Time.now.utc == self.created_at + 48.hours && self.restaurants.count == 0
UserMailer.theactionofthemail(self).deliver_later
end
我是这样尝试的,因为我看到使用 sidekiq 我不必为 deliver_later 我的 UserMailers 创建作业 .. :)
有什么线索吗?
如果不清楚,请告诉我!
提前致谢
after_create
将在创建后立即调用该方法,因此 created_at 永远不会等于(顺便说一句,通常你想说 >=,以防毫秒已经过去)到用户的 created_at.
我建议您立即探索 ActiveJob。创建一个做同样问题的工作,除了 运行 48 小时后:
after_create :reminder
def reminder
CreateRestaurantReminderJob.set(wait: 48.hours).perform_later self
end
在那份工作中:
def perform(user)
return unless user.restaurants.count.zero?
UserMailer.theactionofthemail(user).deliver_now
end
如果您已经在使用 Sidekiq,您可以将它配置为 ActiveJob 的后端,或者使用它自己的 worker。语法可能会改变,但概念不变。
我很难检查我的用户是否在 signed_up 后 48 小时创建了餐厅(objective 是发送电子邮件提醒)。
我尝试了不同的东西,现在我在
用户模型:User.rb
after_create :reminder
def reminder
if Time.now.utc == self.created_at + 48.hours && self.restaurants.count == 0
UserMailer.theactionofthemail(self).deliver_later
end
我是这样尝试的,因为我看到使用 sidekiq 我不必为 deliver_later 我的 UserMailers 创建作业 .. :)
有什么线索吗? 如果不清楚,请告诉我!
提前致谢
after_create
将在创建后立即调用该方法,因此 created_at 永远不会等于(顺便说一句,通常你想说 >=,以防毫秒已经过去)到用户的 created_at.
我建议您立即探索 ActiveJob。创建一个做同样问题的工作,除了 运行 48 小时后:
after_create :reminder
def reminder
CreateRestaurantReminderJob.set(wait: 48.hours).perform_later self
end
在那份工作中:
def perform(user)
return unless user.restaurants.count.zero?
UserMailer.theactionofthemail(user).deliver_now
end
如果您已经在使用 Sidekiq,您可以将它配置为 ActiveJob 的后端,或者使用它自己的 worker。语法可能会改变,但概念不变。