Ruby on rails 如何扩展可安装发动机&x27;在另一个可安装的引擎中重新加载开发环境

Ruby on rails 如何扩展可安装发动机&x27;在另一个可安装的引擎中重新加载开发环境,ruby-on-rails,ruby,rails-engines,Ruby On Rails,Ruby,Rails Engines,使用Rails 3.2.2和Ruby 1.9.2 我有一个rails可安装的引擎EngineA,它声明了一个User类继承表单ActiveRecord::Base。我有另一个引擎EngineB,它想将功能注入EngineA::User。现在我所做的工作如下所示: 方法1: #EngineA app/models/engine_a/user.rb module EngineA class User < ActiveRecord::Base has_attached_file :a

使用Rails 3.2.2和Ruby 1.9.2

我有一个rails可安装的引擎
EngineA
,它声明了一个
User
类继承表单
ActiveRecord::Base
。我有另一个引擎
EngineB
,它想将功能注入
EngineA::User
。现在我所做的工作如下所示:

方法1:

#EngineA app/models/engine_a/user.rb
module EngineA
  class User < ActiveRecord::Base
    has_attached_file :avatar
    has_many :somethings
  end
end

#EngineB lib/engine_b/user.rb
module EngineB
  module User
    def self.extended obj
      obj.class_eval do
        has_many :something_elses
      end
    end
  end
end

EngineA::User.extend EngineB::User
这非常有效除了在开发模式下,我会更改代码,并且模型会刷新。唯一刷新的是
EngineA::User
,而不是我作为初始值设定项放入的mixin。因此,一旦我更改了代码,我就失去了所有扩展功能

我甚至不确定这是最“有效”的方法。。。任何帮助都将不胜感激。提前感谢。

根据,您可以使用
ActionDispatch
回调来加载项目。如果
cache\u classes
设置为false,则在每次请求时都会运行这些回调,就像在开发模式中一样

EngineB.rb
文件中,您可以尝试以下操作:

if Rails.env.development?
    ActionDispatch::Callbacks.to_prepare do
        load "#{File.expand_path(File.dirname(__FILE__))}/../config/initializers/my_mixin.rb"
    end
end
if Rails.env.development?
    ActionDispatch::Callbacks.to_prepare do
        load "#{File.expand_path(File.dirname(__FILE__))}/../config/initializers/my_mixin.rb"
    end
end