1

我認爲最簡單的方法來解釋這是一個人爲的例子。我使用Rails 2.3.8和Ruby 1.8.7以及ActiveRecord到MySQL數據庫。如何從另一個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 
在音樂會模型

另外,加載順序是否重要,如果是的話,如果Concert模型尚未定義/加載,會發生什麼情況?

是否有可能只包括如果音樂會被定義

belongs_to :concert 

+0

你有沒有這方面的運氣?我正在處理我的應用中的類似問題。 – 2011-09-26 05:26:33

回答

2

原來我可以做的tickets_engine如下:

# 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延長,但加載順序和依賴關係是非常重要的。即tickets_engine需要在它的gemspec中添加對concerts_engine的依賴關係,而concert_engine需要在tickets_engine之前加載。

0

我猜你可能需要在你的音樂會模型中需要Ticket。或者將整個引擎包裝在一個模塊中幷包含它。