2010-06-30 5 views
1

레일 앱용 보고서 대시 보드를 작성하고 있습니다. 대시 보드는 사용자 데이터 용이며 현재는 여러 개의 선택 쿼리를 실행하여 페이지에 4 ~ 5 개의 보고서를 작성합니다. 이 작업을 수행하는보다 효율적인 방법이 있다고 확신합니다. 컨트롤러 메서드를 구조화하여 하나의 쿼리 만 실행하고 개별 보고서에 필요한 하위 집합을 파싱하거나 세분화하는 방법은 어떻게됩니까?레일에서 반환 된 레코드의 하위 집합을 분리/검색/계산하는 방법

예를 들어, 사용자는 성별, 나이 및 소득 범위를 가지고 있습니다. 대신

@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

가 완벽하게 작동, 당신을 감사 할 수 있다고 생각합니다. 그냥 나 혼자서 해독 할 수있어. 구문을 조금 설명 할 수 있니? 나는 루비 블록에 관해서는 여전히 약간 진흙 투성이이다. 감사합니다. –

+1

저는 모든 사용자를 반복하고 각각의 논리를 수행합니다. true가 반환되면 사용자는 반복이 완료 될 때 반환 될 새 배열에 포함됩니다. 나의 나쁜 영어와 설명에 유감스럽게 생각한다. 이 게시물은 도움이 될 수 있습니다 : http://matthewcarriere.com/2008/06/23/using-select-reject-collect-inject-and-detect/ –

관련 문제