我有这个带有 X 功能的完整的 Rails 引擎 Foo。
我想制作另一个引擎,引擎 Bar,它几乎相同,但用 y 覆盖功能 x。(它基本上是一样的,但是一些控制器动作和视图的实现方式不同)。
(我稍后可能会将其拆分为几个可安装的引擎,但现在,这将是设置:项目 Baz,使用引擎 Bar,使用引擎 Foo)
我想知道是否有任何陷阱。好像不是经常使用的模式?还有其他人使用这种“某种引擎继承”吗?
我有这个带有 X 功能的完整的 Rails 引擎 Foo。
我想制作另一个引擎,引擎 Bar,它几乎相同,但用 y 覆盖功能 x。(它基本上是一样的,但是一些控制器动作和视图的实现方式不同)。
(我稍后可能会将其拆分为几个可安装的引擎,但现在,这将是设置:项目 Baz,使用引擎 Bar,使用引擎 Foo)
我想知道是否有任何陷阱。好像不是经常使用的模式?还有其他人使用这种“某种引擎继承”吗?
Ruby OpenClassing 是您想要做的。例如,
# in Engine Foo
# this code creates functionality x
Foo::SomeRubyClass
# functionality x
def some_method
0.10
end
end
# in Engine Bar
# this code opens and reevaluates the functionality x in Foo Engine
Foo::SomeRubyClass.class_eval do
# functionlity x method
def some_method
0.05
end
end
使用 Rails 模型/视图/控制器进行更全面的解释。 http://edgeguides.rubyonrails.org/engines.html#overriding-models-and-controllers