1

我认为解释这一点的最简单方法是用一个人为的例子。我使用 Rails 2.3.8 和 Ruby 1.8.7 和 ActiveRecord 到 MySQL 数据库。

我在一个引擎中有以下(人为的)模型(安装在主应用程序的供应商/插件目录中):

# 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

原来我可以在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 扩展concert 模型,但是加载顺序和依赖关系很重要。即tickets_engine 需要在它的gemspec 中添加对concerts_engine 的依赖,并且需要在tickets_engine 之前加载concert_engine。

于 2012-06-21T02:15:26.653 回答
0

我猜您可能需要在您的音乐会模型中使用 Ticket。或者将整个引擎包装在一个模块中并包含它。

于 2011-09-26T07:52:06.747 回答