2013-04-15 27 views
0

我有一個名爲Note的模型。每個音符belongs_to:call_reason。 call_reason has_many:註釋。Rails列表記錄和每個的計數

我想在視圖中執行的操作是顯示call_reasons列表和每個旁邊的總計數,以便我們看到最常見的呼叫原因。

這是我到目前爲止有:

dashboard_controller:

def index 
    @notes = Note.all 
    end 

儀表板視圖:

<% @notes.each do |n| %> 
    <%= n.call_reason.reason %> 
<% end %> 

列出全部筆記call_reasons。

我絆倒在如何列出每個call_reason一次旁邊的總數。我現在只列出了每個音符的所有call_reasons,這是一團糟。我想我可以以某種方式將其範圍擴大或更改實例變量,但我很難做到正確。

有什麼想法?

+0

我認爲這可能是activerecord group_by的候選人,但我需要弄清楚如何使用它。 – nulltek

回答

0

既然要列出電話的原因,你應該是開始:

def index 
    @call_reasons = CallReason.all 
end 

然後在您的視圖,你可以這樣做:

<% @call_reasons.each do |call_reason| %> 
    <%= call_reason.reason %> <%= call_reason.notes.count %> 
<% end %> 

請注意,這會爲每一個執行查詢在你的數據庫中調用原因。爲了防止這種情況,您可以使用counter cache。請查看關於Rails指南的counter cache部分。

+0

這很好用,但在後端生成很多查詢。有沒有辦法使用group_by來重構這個?這會減少查詢嗎? – nulltek

+0

我建議使用計數器緩存來解決這個問題。我在這個主題上增加了一個更新的鏈接。祝你好運。 – Mischa