2013-06-29 5 views
0

나는 STI 클래스 계층과 같이이 : 나는 예를 들어, 호출 할 때는 슈퍼 클래스 STI 서브 클래스 반환 레일

Producer, Partner, Freelancer < Statusowner < Contact 

Partner.all 나는 레일이 생산 참조 :

SELECT "contacts".* FROM "contacts" WHERE "contacts"."type" IN ('Partner', 'Producer', 'Partner', 'Freelancer') ORDER BY contacts.name 

당신이 처음 파트너를 포함하고 다시 파트너를 포함 Statusowner의 모든 서브 클래스, 것을 알 수있다. 이것은 모든 서브 클래스와 유사하게 발생합니다.

나는 Statusowner에 self.descentants을 설정, 그래서 모든 초기 개발 환경에서로드되는 :

class Statusowner < User 
    def self.descendants 
    [Producer, Sales, Partner, Freelancer] 
    end 
end 

내가 잘못하고있는 중이 야 어떤 생각?

답변

0

아마 당신은 단순히 자손 메소드를 재정의해서는 안됩니다. 아마도 클래스를 정의한 후에 파일을 요구하기 만하면됩니다. 당신이 자동로드에 대한 해킹의 종류를 선호하는 경우

어쩌면 당신은 당신의 코드를 변경할 수 있습니다 :이 같은 결과를 달성 할 수 있으리라 생각

class Statusowner < User 
    MY_DESCENDANTS = [Producer, Sales, Partner, Freelancer] 
end 

을하지만,이 방법은 원래 메소드를 오버라이드 (override)하지 않습니다 . 아, 그런데 하위 클래스는 오버로드 된 메서드를 상속하므로 모든 서브 클래스에는 [Producer, Sales, Partner, Freelancer]을 반환하는 하위 메서드가 있습니다.

+0

팁 주셔서 감사합니다. 최대한 빨리 시도 할 것입니다. –

관련 문제