2011-10-10 3 views
0

두 개의 레일스 프로젝트가 있으며 Foo와 Bar라고 부릅니다. 그들은 같은 모델을 공유합니다. 모델은 Foo 및 Bar 링크에서 해당 파일에 저장됩니다.레일에서로드 순서 보장

푸의 모델 중 하나의 특정 메소드의 동작이 바에서 다른 할 필요 : 프로젝트 푸의 모델에서

/model_a.rb : 어딘가에 프로젝트 바에서

class ModelA 
    def method_a 
    puts "default behavior here" 
    end 
end 

:

class ModelA 
    def method_a 
    puts "special behavior here" 
    end 
end 

다음 코드 줄이되도록 :

x = model_a.method_a 

은 Bar가 Foo의 모델을 망쳐 놓지 않고도 다른 프로젝트에서 다른 프로젝트에서 다르게 실행됩니다. 유사한 상황이 존재할 것입니다. 아마도 Foo의 모델이 단순히 보석 일 경우,로드 순서 질문은 다를 수 있습니다.

제 질문은 다음과 같습니다.이 코드 스 니펫을 프로젝트 Bar에 어디에 배치해야합니까? 그리고 Bar의 mix-in이 마지막에로드되어 프로젝트 바에서 런타임에 올바른 함수가 실행되도록 보장하려면 어떻게해야합니까?

답변

2

상속? 그것이 당신이 묘사하는 것입니다.

활성 레코드 인 경우 Bar 앱에서 테이블 이름을 강제로 적용한 다음 하위 클래스를 사용할 수 있습니다.

다른 방법으로는 해킹이라고 생각합니다.

require 'modelA' 
class ModelA 
    # then do your initializing, or include your module here 
end 

루비가하는 override_model_a라는 이니셜을 만들기 원래 클래스를 필요로하고 초기화에서 그것을 무시하면 당신이 원하는 것을 할 수 있도록 "마지막 승리".