2017-07-06 56 views
0

我试图创建一个CRON作业来监视我平台上的user的活动状态。检查过去x天是否创建了Rails关联

它应该检查用户是否已经购买了某件东西或给某人发送了消息,如果没有,则发送一封电子邮件。我对同样的方法是:

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天传递消息的人发送电子邮件的条件。

ClientPurchasesConversations关联为has_many关联。

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

在Rails上实现它的好方法是什么?

+0

什么是客户端?它是User上的一个属性还是User模型中定义的方法? – dhaliman

回答

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? }