1

これを説明する最も簡単な方法は、不自然な例を使用することだと思います。Rails2.3.8とRuby1.8.7およびActiveRecordからMySQLデータベースを使用しています。

1つのエンジンに次の(考案された)モデルがあります(メインアプリのvendor / pluginsディレクトリにインストールされています):

# 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

コンサートが定義されている場合は?

4

2 に答える 2

2

ticket_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 は、その gemspec で Concerts_engine への依存関係を追加する必要があり、concert_engine は ticket_engine の前にロードする必要があります。

于 2012-06-21T02:15:26.653 に答える
0

コンサート モデルで Ticket を要求する必要があるかもしれないと思います。または、エンジン全体をモジュールにラップして、それを含めます。

于 2011-09-26T07:52:06.747 に答える