2013-08-18 37 views
0

這可能很簡單,但我在正確使用時遇到了一些問題。活躍記錄:自X日期以來尚未創建活動的用戶

我有一個用戶模型和事件模型。兩者都具有通常的created_at屬性。用戶可以擁有許多事件並且事件屬於用戶。

想要做的事情是在活動記錄中寫下一些內容,以便給予所有自指定日期以來未創建事件的用戶。

我設法做到了多循環,但效率非常低。是否有可能通過一個陳述或者一個命名範圍有效地做到這一點?

我有一個名爲範圍由用戶來算的事件:

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

我不知道是否類似的是可能的,但我有麻煩工作如何找到最後事件提交給用戶。

任何人都可以指向正確的方向嗎?

回答

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 (#{subquery})") 

希望這有助於並非所有用戶。

+0

非常酷。運行良好,但也給了我從未創建過活動的用戶。我基本上是在曾經創建但尚未一段時間的用戶之後。不過,我相信我可以根據你的回答找出答案。謝謝! – Raoot

0

聽起來像你想要的是最大事件創建日期早於某些時間的用戶。

scope :user_event_count, 
     select("users.id, max(events.created_at) AS max_event_created_at"). 
     joins(:events). 
     group("users.id"). 
     having("max(events.created_at) < :start_date") 

如果你有一個非常大的一些事件可能是更有效的構建它看作是之前的特定時間存在一個事件,不存在因爲當時事件的查詢。