0

我有这个带有 X 功能的完整的 Rails 引擎 Foo。

我想制作另一个引擎,引擎 Bar,它几乎相同,但用 y 覆盖功能 x。(它基本上是一样的,但是一些控制器动作和视图的实现方式不同)。

(我稍后可能会将其拆分为几个可安装的引擎,但现在,这将是设置:项目 Baz,使用引擎 Bar,使用引擎 Foo)

我想知道是否有任何陷阱。好像不是经常使用的模式?还有其他人使用这种“某种引擎继承”吗?

4

1 回答 1

1

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

于 2012-11-18T22:57:20.940 回答