2014-10-21 2 views
0

관리자 제어판을 만들고 있는데 마지막 단계에 있습니다.성별 특정 등록 사용자 수를 표시하는 방법

Malegender으로 선택한 등록 된 사용자에 대한 통계는 어떻게 만듭니 까?

예 :

545 남성 등록 된 사용자

(323) 여성 등록 된 사용자

그래서 나는 나의 뷰에서 출력 위의 예를 싶습니다. gender 열의 행을 계산하는 방법을 잘 모르겠습니다.

+0

당신이 실제로 찾고있는 것에 관해서, 나는 당신이 무엇을 요구하고 있는지 확신하지 못합니다. 사용자가 일종의 성별 필드 또는 gender_id를 사용한다고 가정합니다. 그 행 수. –

+0

네, 그게 제가 묻는 것입니다. 뷰에서 행과 출력을 계산하는 방법. – xps15z

답변

4

User 필드에 gender 필드가 있다고 가정하면 사용자 클래스에 클래스 메서드를 추가 할 수 있습니다.

class User < ActiveRecord::Base 
    def self.total_males 
    where(gender: 'male').count 
    end 
    def self.total_females 
    where(gender: 'female').count 
    end 
end 

그런 다음보기

<%= User.total_males %> Male registered users 
<%= User.total_females %> Female registered users 

에 당신은 또한 인덱스는 당신이 당신의 성별 필드 쿼리를 빠르게 확인하는 것이 좋습니다. 이주시 색인을 추가 할 수 있습니다.

+1

'scope'로 기대하는 것은 ActiveRecord_Relation 객체를 반환한다는 것입니다. 기술적으로 가능 함에도 불구하고 다른 것을 반환하는 나쁜 습관. 이것들은 클래스 메소드로서 더 좋을 것이다. 또는 범위에서'.count'를 제거하고 인라인 ('.total_males.count')을 호출하십시오. –

+1

좋은 지적. 편집 할 것입니다. – JosephL

4

그래서 여기에 약간의 텔레파시입니다 :) 당신이 그것을에서 :gender 속성 (문자열 '남성'또는 '여성')와 모델 User이 있다고 가정, 당신은 제공되지 충분한 정보가 없습니다. 그래서 필요하기 수는 다음과 같이 표시됩니다

User.group(:gender).count 

이이 같은 SQL 쿼리를 제공합니다 :

SELECT COUNT(*) AS count_all, gender AS gender FROM `users` GROUP BY `users`.`gender` 

을 그리고 당신은이 같은 해시 얻을 것이다 :

{ 'male' => 545, 'female' => 323 } 

사용이)

UPD : 추가 필터링 (예 : 등록 또는 somethi ng), where 절을 추가하십시오.

UPD2 :이 솔루션은 현재 모든 통계를 가져 오는 것입니다. 특정 성별에 대한 통계 만 원하면 아래의 JosephL의 답변을 사용해야합니다.

관련 문제