2012-11-14 34 views
0

我有与功能X.这个充满轨引擎美孚导轨全引擎使用完整的引擎

我不想再拍引擎,引擎吧,这是几乎相同的,但覆盖funcitonality X,其中y 。 (它基本上是一样的,但少数控制器动作和视图有不同的实现)。

(我会在后面几种安装引擎拆分这一点,但就目前而言,这将是设置: 项目巴兹,利用发动机吧,它使用的发动机美孚)

我想知道是否有任何陷阱。它看起来不像一个经常使用的模式?任何其他人使用这种'某种引擎继承'?

回答

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

+0

谢谢,我忽略了这个简单的解决方案。其结果可能是,我不应该在Foo中给我的文件和Bar中的同名? – SirLenz0rlot

+1

实际上,命名它也是有意义的,所以你可以看到什么是开放分类。开放分类通常被称为“装饰者”模式,因为你正在用新的/不同的功能来装饰一些功能。 – westonplatter

+0

关于装饰模式的更多信息:http://lukeredpath.co.uk/blog/decorator-pattern-with-ruby-in-8-lines.html – westonplatter