2010-08-18 6 views
0

저는 Kases라는 모델에 많은 레코드를 가지고 있습니다. 각 kase 레코드는 Active, On Hold, Invoice Sent 또는 Archived 상태가 있습니다.Rails는 필드에 X가있는 레코드 수를 출력합니까?

총 kase 레코드 수, 보류로 표시된 kase 레코드의 총 수, 전송 된 송장으로 표시된 총 kase 레코드 수 및 대시 보드에있는 총 kase 레코드의 수를 대시 보드에 추가하는 방법을 알아 내려고 노력 중입니다. 보관 된 것으로 표시된 kase 레코드의 총 수.

현재 내가 가진 카세 레코드의 상태를 설정 한 다음

<li>Case Status<span><%= f.select "kase_status", ['Active', 'On Hold', 'Archived', 'Invoice Sent'] %></span></li> 

가 kase_status가 kases 테이블의 필드되며, 문자열된다

t.string :kase_status 

인가 거기 이것을하는 간단한 방법?

감사합니다,

대니

편집 :

콘솔 오류 메시지 :

>> Kases.find(:all).select { |k| k.kase_status == "Active"}.size 
NameError: uninitialized constant Kases 
    from /Library/Ruby/Gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:443:in `load_missing_constant' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:80:in `const_missing' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:92:in `const_missing' 
    from (irb):1 
>> 

답변

3

네! 모든 사람의 조언에 따라

업데이트

, 나는 대답을 업데이트했습니다. 이것은 이것을 달성하는 훨씬 더 빠르고 적절한 방법입니다.

컨트롤러

@kases_active_count = Kase.count(:conditions => ['kase_status = ?', 'Active']) 
@kases_on_hold_count = Kase.count(:conditions => ['kase_status = ?', 'On Hold']) 
@kases_archived_count = Kase.count(:conditions => ['kase_status = ?', 'Archived']) 
@kases_invoice_sent_count = Kase.count(:conditions => ['kase_status = ?', 'Invoice Sent']) 

HTML

<%= @kases_active_count %> 
+0

안녕하세요, 이렇게해야합니다 : <% - h Kases.find (: all) .select {| k | k.kase_status == "Active"}. size %>? – dannymcc

+0

@ dannymcc, 컨트롤러에 추가 할 것입니다. 위처럼. 나는 – Trip

+0

을 업데이트 할 것입니다. 명령을 적용하기 전에 IRB에서 작동하는지 확인하십시오. 그게 적어도 내가하는 일이야. – Trip

3

당신은 예를 들어, Kase의 계산 방법을 사용할 수 있습니다

Kase.count(:conditions => ['kase_status = ?', 'Active']) 

이 방금 쿼리를 할 의미 ~ c 데이터베이스에서 모든 Kase 인스턴스를 가져 와서 값을 확인하기보다는 일치하는 객체의 수를 ount하십시오.

단일 쿼리에서 다른 상태 값을 모두 얻고 싶은 경우에 당신이 할 수 있습니다 : 당신에게 kase_statushow_many 속성 카세 같은 개체의 컬렉션을 반환합니다

@all_counts = Kase.find(:all, :group => 'kase_status', :select => 'kase_status, count(*) as how_many) 

합니다. 그런 다음 해당 컬렉션을 사용하여 모든 상태 수를 표시 할 수 있습니다. 예 :

+0

카운트 방법이 훌륭하게 보입니다. 혹시라도 내 예제를 선택해야하는 이유가 있다면 언제 모든 결과를 검색하여 쿼리합니까? – Trip

+0

@Trip 그 (것)들을 전부 얻고 그 (것)들을 하나씩 처리하는 주된 이유는 당신이 파생 된 분야, 즉 데이터베이스에없는 분야에 의존하고있는 경우 일 것입니다. 어쩌면 (비현실적이지만 간단한 예제) Kase의 '비활성'메소드를 사용하여 비활성 Kase의 수를 계산할 수 있습니다. 비활성 상태 인 경우 true를 반환합니다. 저는 모델의 모든 인스턴스를 찾는 것을 매우 조심합니다. 데이터베이스에있는 몇 가지 인스턴스 이상으로 시도해 보면 꽤 느릴 것입니다 (그룹화 한 속성에 대한 색인이 필요하지만). – Shadwell

관련 문제