2010-06-30 15 views
1

我正在爲Rails應用程序編寫報告儀表板。儀表板用於用戶數據,並且當前正在運行多個計數選擇查詢以在頁面上構建四個或五個報告。我確信有一個更有效的方法來做到這一點。我將如何構建控制器方法,以便它只運行一個查詢,然後解析/細分各個報告所需的子集?如何在Rails中隔離/檢索/計數返回記錄的子集

例如,用戶具有性別,年齡和收入範圍。而不是做

@men = User.count(:conditions => ['gender = ?', 'm'] 
@women = User.count(:conditions => ['gender = ?', 'f'] 
@age = User.count(:conditions => ['age_range = ?', 1] 
etc. 

的我能不能做一個

User.find(:all, :select => 'id,gender,age_range,income_range') 

,然後分析出我需要什麼?

任何幫助表示讚賞。

謝謝。

回答

3

我相信你能做到這一點

@users = User.all 

@men = @users.select{|u| u.gender == 'm'}.size 
@women = @users.select{|u| u.gender == 'f'}.size 
@age = @users.select{|u| u.age_range == 1}.size 
+0

謝謝你,非常完美。爲了我自己可以分解它,你能解釋一下這個語法嗎?當談到紅寶石塊時,我仍然有點渾濁。 謝謝 – 2010-06-30 16:29:40

+1

我只是遍歷所有的用戶,並執行每個用戶的邏輯。如果返回true,則用戶將包含在迭代完成時將返回的新數組中。對不起,我的英語和解釋不好。這篇文章可能會幫助你:http://matthewcarriere.com/2008/06/23/using-select-reject-collect-inject-and-detect/ – 2010-06-30 16:40:36