2017-07-06 10 views
0

私のプラットフォーム上でuserの活動状況を監視するためにCRONジョブを作成しようとしています。Rails関連付けが過去x日以内に作成されたかどうか確認してください

ユーザーが何かを購入したか、誰かにメッセージを送信したかどうかを確認し、そうでない場合は電子メールを送信します。同じのための私の方法は次のとおりです。

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日間の誰かがメッセージとして送られていない場合は、メールを送信した状態が含まれるように、これを拡張したいです。

Clientは、PurchasesおよびConversationsとしてhas_manyアソシエーションと関連しています。

これを行う方法の1つは、ネストされたループを作成して特定のpurchasesmessagesを拒否することですが、これは本当に非効率的です。

これをRailsに実装する良い方法はありますか?

+0

メッセージとして送らいる場合created_atの使用をチェックすることができますか?ユーザーの属性ですか、ユーザーモデルで定義されているメソッドですか? – dhaliman

答えて

1

あなたは、ユーザーが何かを購入したり、誰かのクライアントがどのようなものです

@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? } 
関連する問題