2017-07-06 54 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? }