2011-05-27 89 views
0

我有,我似乎無法得到一個相當簡單的查詢權....導軌 - 統計查詢,同時連接三個表,一個

我的模型:

  • 用戶 - 有很多友誼(與其他用戶)
  • 用戶 - 有許多意見
  • 用戶 - 有很多評論
  • 用戶 - 擁有衆多選票

我需要一個代表

所有CURRENT_USER的朋友,他們的意見,意見或投票created_at日期計數> current_user.last_refresh_date

現在,我通過遍歷建立一個數組友誼,並添加所有提交,評論和投票。然後我重新迭代這個構建的數組,同時比較日期以確定計數是否應該增加。不是最理想的解決方案。

編輯

@TobiasCohen

有效的解決方案。謝謝!

跟進:

我希望再增加一個計數到當前查詢。我需要計算current_user.submissions上所有不屬於原始計數(即不是朋友)的新評論&。

僞代碼:

current_user.submissions.join(:評論:投票,:朋友)。凡( '?!?last_activity> AND friend_id =',current_user.last_refresh_date,current_user.id ).count

我不能完全得到查詢正確(通過活動記錄複雜查詢新)。

我打算將它作爲一個單獨的查詢,然後將其添加到原始計數。它可以被吸收到一個查詢而不是兩個?

+0

和問題是什麼? – 2011-05-27 03:51:51

回答

2

我想你可以通過在用戶上添加一個緩存列來獲得最好的結果,我們把它稱爲:last_activity_at,然後用提交,評論和投票的after_create回調來更新。

class Submission < ActiveRecord::Base 
    belongs_to :user 

    after_create :update_user_last_activity_at 

    private 
    def update_user_last_activity_at 
     user.update_attribute :last_activity_at, Time.now 
    end 
end 

然後,您可以簡單地獲取與用戶:

current_user.friends.where('last_activity_at > ?', current_user.last_refresh_date)