2012-11-14 79 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