0

これはおそらく非常に単純ですが、これを正しく行うのに少し問題があります。

User モデルと Event モデルがあります。どちらも通常の created_at 属性を持っています。ユーザーは多くのイベントを持つことができ、イベントはユーザーに属します。

やりたいことは、特定の日付以降にイベントを作成していないすべてのユーザーを提供するために、アクティブなレコードに何かを書き込むことです。

複数のループでそれを行うことができましたが、非常に非効率的です。1 つのステートメントまたはおそらく名前付きスコープでこれを効率的に行うことは可能ですか?

ユーザーごとにイベントをカウントするための名前付きスコープがあります。

  scope :user_event_count,
      select("users.id, count(events.id) AS events_count").
      joins(:events).
      group("users.id").
      order("events_count DESC")

同様のことが可能かどうか疑問に思っていますが、ユーザーが送信した最後のイベントを見つける方法がわかりません。

誰かが私を正しい方向に向けることができますか?

4

2 に答える 2

1

これを達成する方法についての分割があります。

  1. 特定の日付以降に作成されたすべてのイベントのすべてのユーザーを選択します
  2. 上記のセットに含まれていないすべてのユーザーを選択します
subquery = Event.select("user_id").where("created_at >= :start_date", {start_date: params[:start_date]}).to_sql;
User.where("id NOT IN (#{サブクエリ})")

お役に立てれば。

于 2013-08-18T16:30:52.737 に答える