2012-01-19 29 views
0

所以,我有一個自定義表單生成器。它的工作原理除了當我想要重載超類方法時。自定義FormBuilder超類是一個SafeBuffer。我錯過了什麼?

當我做到以下幾點:

class MyFormBuilder < ActionView::Helpers::FormBuilder 
    def number_field(value, options = {}) 
    super.number_field(value, options) 
    end 
end 

,並呼籲

'f.number_field(:value)' 
我的形式

,我得到以下錯誤:

undefined method `number_field' for #<ActiveSupport::SafeBuffer:0x007f9a44b762f0> 

我呼籲

raise "class: #{super.class}" 

內部編號字段,我也得到:

類:的ActiveSupport :: SafeBuffer

所以錯誤是從我重寫的方法產生。其他不調用超類方法的方法在我的表單構建器中正常工作。任何想法我做錯了什麼?

回答

1

只需撥打super即可,無需參數。

這將調用ActionView :: Helpers :: FormBuilder的方法版本,其中傳遞給原始調用的參數相同。

但是,如果您想要實際覆蓋該方法,則需要提供自己的代碼。嘗試是這樣的:

class MyFormBuilder < ActionView::Helpers::FormBuilder 
    def number_field(value, options = {}) 
    "foo" 
    end 
end 

看看是否調用f.number_field(:value)打印出foo

然後開始用你真正想做的任何事情來代替你的number_field方法的膽量。

相關問題