自定义FormBuilder超类是一个SafeBuffer。我错过了什么?

时间:2012-01-19 00:48:07

标签: ruby-on-rails-3

所以,我有一个自定义表单生成器。除了我想覆盖超类方法之外,它的工作原理。

当我执行以下操作时:

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

所以错误是由我的重写方法引起的。其他不调用超类方法的方法在我的表单构建器中工作正常。知道我做错了吗?

1 个答案:

答案 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方法的内容。