2013-11-25 67 views
0

我有一個Ticket.rb模型,和School.rb模型。得到。關聯模型的計數

票務belongs_to學校

學校has_many門票

我如何使用ActiveRecord找出多少張門票每個學校都有的總.count

我知道Ticket.where(:school_id => -insert School ID here-).count會給我每個學校的個人計數,但我用它來填充數據到一個圖表,所以我真的需要更多像School.tickets.count

這可能不會弄亂我的聯想?

感謝所有..

+1

我認爲你應該使用一個命名的範圍。這是最乾淨的。 http://stackoverflow.com/q/2900031/1251349 –

回答

3
Ticket.group(:school_id).count 

這會給你的門票數量爲每所學校ID與密鑰作爲學校ID和值如果你想t時的票數

通過在學校不同的屬性O基團,然後

Ticket.joins(:school).group("schools.name").count 

如輸出:

{3 => 10, 4 => 30} 
+0

謝謝。如果我的學校模型有一個「名稱」列,我寧願顯示而不是ID,該怎麼辦?即{學校1 => 10,學校2 => 30} – Devin

+0

感謝您的編輯。這正是我需要的。謝謝! – Devin

0

如果你有一個特定的學校實例(如@school),你可以使用 @school.tickets.count

爲了獲得更好的性能,可以在概述here您的控制器使用方法group

所以在你的控制器:

def someaction 
    @school_tickets = Ticket.group(:school_id) 
end 

,並在你的看法,你可以通過循環的@school_tickets如:

@school_tickets.each do |school_ticket| 
    school_ticket.count 
end 
+1

上有ActiveRecord類沒有'group_by'方法。你的意思是'Ticket.all.group_by'?因爲'group_by'只適用於數組 – usha