2012-01-19 49 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方法的胆量。

相关问题