Как расширить модель в движке Rails из другого движка Rails? - PullRequest
1 голос
/ 09 марта 2011

Я думаю, что самый простой способ объяснить это с надуманным примером. Я использую Rails 2.3.8 с Ruby 1.8.7 и ActiveRecord для базы данных MySQL.

У меня есть следующая (надуманная) модель в одном движке (установленная в каталоге 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

в концертной модели?

Кроме того, важен ли порядок загрузки, и если да, что произойдет, если модель Концерта еще не была определена / загружена?

Можно ли включить только

  belongs_to :concert

если Концерт был определен?

Ответы [ 2 ]

2 голосов
/ 21 июня 2012

Оказывается, я могу сделать следующее в 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 должен был бы добавить зависимость от plays_engine в его gemspec, и необходимо будет загрузить Concert_engine перед tickets_engine.

0 голосов
/ 26 сентября 2011

Полагаю, вам может понадобиться билет в вашей концертной модели. Или оберните весь двигатель в модуль и включите его.

...