2016-12-05 71 views
0

有一个Rails 4.2.6应用程序,它有一个核心插件,通过alias_method_chain扩展ActiveRecord reload方法。
我需要编写另一个插件来扩展相同的基本功能,并保留核心插件添加的内容。
据我得到它,我可以叫alias_method_chain只有一次,但我希望得到的东西是这样的:Rails:扩展alias_method_chain

class Klass 
    def foo 
end 

core_plugin: 
    base.send :alias_method_chain, :foo, :bar 

my_plugin: 
    base.send :alias_method_chain, :foo, :baz 

凡Klass.foo结果来电呼叫:baz:bar:foo

那么假设我无法编辑core_plugin,我的选择是什么?

回答

0

你需要像这样

Klass类

def foo 
    puts "foo" 
    end 
def baz 
    puts "printing baz..." 
bar 
    puts "...printing bar" 
    end 

    alias_method :bar, :foo 
    alias_method :foo, :baz 
end 

Klass.new.foo 

打印

印刷巴兹...... 富 ...打印条码

这是乌拉圭回合的期待?如果没有请解释

+0

那么,有点,但我已经'base.send:alias_method_chain,:foo,:酒吧',我不能改变没有打破目前的功能(或不知道如何) – svz

+0

我不是确定你目前的要求,你可以发布所有的代码,以便我可以看。 – Ajaykumar

+0

有问题的代码可以在这里找到:https://github.com/redmine/redmine/blob/3.3-stable/lib/plugins/acts_as_customizable/lib/acts_as_customizable.rb#L44 任务是创建另一个结构代理与所讨论的插件完全相同,但将数据存储在不同的数据库模式中。 – svz