2012-01-15 62 views
1

所以我有三個型號計數和檢索對象

"Text" has_many :statistics, :as => :loggable 
"Document" has_many :statistics, :as => :loggable 
"Statistic" belongs_to :loggable, :polymorphic => true 
"Company" has_many "Documents"/"Texts" 

現在我想不同的restults,F.E.

  • 得到公司
  • 的所有文字/文檔對象的統計對象的總數在本月獲得公司 的所有文字/文檔對象的統計對象的總數
  • 拿到第一5個文本/公司的最統計 對象的文檔
  • 得到了公司的第一個五年文本/文件最統計 對象本月

本月與統計對象的創建日期有關。

我真的不知道如何做到這一點。我在軌道控制檯中嘗試了不同的東西,但沒有運氣。

company.texts 
company.documents 

任何想法如何做到這一點? 在此先感謝。如果有不明之處,請留下評論。

回答

5

前兩個很簡單。

得到的所有文字/文檔的統計對象的總數對象

Statistic.where(:loggable_type => "Text").where(:loggable_id => company.texts) 

得到的所有文字統計對象的總數/文檔對象本月

Statistic.where('created_at between ? and ?', 1.month.ago, Time.now).where(:loggable_type => "Text").where(:loggable_id => d.texts).count 

拿到前五文本/最統計公司的文檔對象

ids = Statistic.select("COUNT(*) AS count_all").where(:loggable_type => "Text").where(:loggable_id => company.texts).group(:loggable_id).order("count_all desc").limit(5).size 
Text.where(:id => ids) 

得到的第一個五年文本/公司的最統計對象的文檔本月

ids = Statistic.select("COUNT(*) AS count_all").where('created_at between ? and ?', 1.month.ago, Time.now).where(:loggable_type => "Text").where(:loggable_id => d.texts).group(:loggable_id).order("count_all desc").limit(5).size 
Text.where(:id => ids) 
+1

只是一個除了嘗試:它只會工作與單數類名稱 - >統計(不統計) – Vapire 2012-01-15 17:14:05

+0

@Vapire好吧,發現了。 – Gazler 2012-01-15 17:14:54

+0

哦對不起,我還不夠清楚。看到我上面的編輯。前兩個我需要「與給定公司有關的所有文本模型的總數」以及與給定公司有關的所有公司模型的總數「。分開,未組合 – choise 2012-01-15 17:15:52

0

company.texts.join(:statistics).where('statistics.created_at between ? and ?', Time.now, 1.month.ago) 

company.documents.join(:statistics).where('statistics.created_at between ? and ?', Time.now, 1.month.ago)