1

나는 이것을 설명하는 가장 간단한 방법이 인위적인 예제라고 생각한다. Ruby 1.8.7에서는 Rails 2.3.8을, MySQL DB에서는 ActiveRecord를 사용하고 있습니다.다른 Rails 엔진에서 Rails 엔진의 모델을 확장하는 방법은 무엇입니까?

# contrived_app/vendor/plugins/concerts_engine/app/models/ 
class Concert < ActiveRecord::Base 
    has_many :artists 
    belongs_to :venue 
end 

그리고 다른 엔진에서 다음 (인위적인) 모델 :

# contrived_app/vendor/plugins/tickets_engine/app/models/ 
class Ticket < ActiveRecord::Base 
    belongs_to :concert 
end 

나는 하나 개의 엔진에서 다음 (인위적인) 모델 (주요 응용 프로그램의 공급 업체/플러그인 디렉토리에 설치) 한

어떻게 콘서트 모델

has_many :tickets 

을 확장/포함 할 수 있습니다?

또한로드 순서가 중요합니까? 그렇다면 콘서트 모델이 아직 정의 /로드되지 않은 경우 어떻게됩니까?

는 만 콘서트가

belongs_to :concert 

정의 된 경우 포함 할 수 있습니까?

+0

행운이 있었나요? 내 애플 리케이션에서 비슷한 문제에 대해 노력하고있어. –

답변

2

내가이 (가) tickets_engine에서 다음을 수행 할 수 있습니다 밝혀졌습니다. 즉 tickets_engine은 gemspec의 concerts_engine에 종속성을 추가해야하고 concert_engine은 tickets_engine보다 먼저로드해야합니다.

0

콘서트 모델에서 티켓을 요구해야 할 수도 있습니다. 또는 전체 엔진을 모듈로 감싸서 포함 시키십시오.

# contrived_app/vendor/plugins/tickets_engine/config/initializers/concert_extensions.rb 
# or 
# contrived_app/config/initializers/concert_extensions.rb 
Rails.logger.info "\n~~~ Loading extensions to the Concert model from #{__FILE__}\n" 

Concert.class_eval do 
    has_many :tickets 
end 

는 개인적으로, 내 선호하는 방법은 tickets_engine에서 콘서트 모델을 확장하는 것입니다,하지만로드 순서 및 종속성은 중요하다

관련 문제