Ruby on rails 如何扩展可安装发动机&x27;在另一个可安装的引擎中重新加载开发环境
使用Rails 3.2.2和Ruby 1.9.2 我有一个rails可安装的引擎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
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