2010-08-09 3 views
1

연락처라는 모델이 있습니다. (: 조건 => "슈가 CRM = 거짓") 사람이 선택하는 (무엇이 누락 된 것은 난 단지 self.contact_letters.find를 원하는 것입니다a : 조건을 모델의 범위에 추가하려면 어떻게합니까?

def all_completed_events 
    # for a given Contact, return all contact_events records that exist and where sugarcrm = false 
    return (self.contact_letters + self.contact_postalcards + self.contact_emails + self.contact_voicemails + self.contact_calls) 
end 

:

나는 다음과 같은 방법을 추가 한 sugarcrm은 부울입니다.) (분명히 이것은 다른 모델, contact_letters, contact_emails 등에서 적용됩니다)

어떻게하면됩니까?

답변

0

당신은 또 다른 이름 범위를 정의하고 체인 수 :

named_scope nosugar, :conditions => { :sugarcrm => false } 

def all_completed_events 
    return self.contact_letters.nosugar + self.contact_postalcards.nosugar + ... 
end 

그것이 STI이다 (당신의 ContactEvent 모델 구현 방법에 따라 당신은 을 반환하는 모두 contact_events 또는 그 중 특정 하위 집합 일 수 있습니다.) 다음과 같은 항목을 추가로 얻을 수 있습니다.

return self.contact_events.nosugar 
+0

ContactEvent는 모델이 아닙니다. 별도의 ContactLetter, ContactPostalcard 등이 있습니다. 나는 모든 것을 함께 묶은 다음 끝에 명명 된 범위를 적용 할 수 있을까요? – Angela

+0

나는'self.all_completed_events.nosugar'와 같이'all_completed_events' 메쏘드를 활용할 수 있어야한다고 생각합니다. 아니지만 100 % 확신 - 그것을 테스트 레일 콘솔이 필요합니다! – nfm

0

어쩌면이 시도 :

(self.contact_letters + self.contact_postalcards + self.contact_emails + self.contact_voicemails + self.contact_calls).select {|record| !record.sugarcrm } 
관련 문제