所以,我有一个自定义表单生成器。除了我想覆盖超类方法之外,它的工作原理。
当我执行以下操作时:
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}"
内部号码字段,我得到:
class:ActiveSupport :: SafeBuffer
所以错误是由我的重写方法引起的。其他不调用超类方法的方法在我的表单构建器中工作正常。知道我做错了吗?
答案 0 :(得分: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方法的内容。