2015-05-11 33 views

回答

1

我敢打賭,你叫alias_methodSinatra::Base範圍內。您應該在單身人員類別Sinatra::Base內調用它,因爲方法get被定義爲類方法。

+0

啊!你會是對的,我明白了,我不能相信我錯過了,謝謝指出。 – Thermatix

0

的語法是:

alias_method :new_name, :func_name 

例如,你有一個記錄中的name屬性:

alias_method :to_s, :name 
+0

'old_name'&'func_name'是存儲值的變量,在這種情況下:'old_name =:old_get'&'func_name =:get'。奇怪的是,當我嘗試使用'instance_method(func_name)'將舊方法存儲爲'UnBoundMethod'時,它將使用相同的錯誤(該方法不存在),但是執行'放入Sinatra :: Base.methods.sort。 to_s'表明方法':get'確實存在。 – Thermatix

0

我找到了一個很好的回答我的問題在這裏在this link

而不是猴子修補原始cl屁股我相反創建一個模塊,然後使用prepend,只需撥打super來調用原始方法。 我現在這樣做:

Sinatra::Base.prepend Restman::Patches::Sinatra_Base_Patch 

隨着包含覆蓋原始的功能模塊Sinatra_Base_Patch

我遵循的例子是這樣的:

class Foo 
    def bar 
    'Hello' 
    end 
end 

module FooExtensions 
    def bar 
    super + ' World' 
    end 
end 

class Foo 
    prepend FooExtensions # the only change to above: prepend instead of include 
end 

Foo.new.bar # => 'Hello World'