检查过去x天是否创建了Rails关联

时间:2017-07-06 19:39:30

标签: ruby-on-rails ruby-on-rails-4 activerecord cron

我正在尝试创建一个CRON作业来监控我平台上user的活动状态。

它应该检查用户是否购买了某些东西或是否向某人发送了消息,如果没有,则发送电子邮件。我的方法是:

def self.create_new_user_reminders
  @new_users = User.where({ banned: false, admin: false })

  @new_users = @new_users.reject { |u| u.client.try(:purchases).any? or  u.client.try(:conversations).any? }

  @new_users.each do |nu|
    SalesMailer.delay.signup_no_engagement(nu)
  end
end

现在我想扩展此项,以包含一个条件,如果客户在过去14天内没有购买或发送消息,则会发送电子邮件。

ClientPurchasesConversationshas_many关联。

我可以想到这样做的一种方法是购买创建嵌套循环并拒绝特定的purchasesmessages,但这实际上效率很低。

在Rails上实现此功能的好方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用created_at来检查用户是否购买了某些内容或是否已向某人发送消息

@new_users = @new_users.reject { |u| u.client.try(:purchases).where('created_at > ?', 14.days.ago).any? or  u.client.try(:conversations).where('created_at > ?', 14.days.ago).any? }