Пользовательский суперкласс FormBuilder - это SafeBuffer.Что мне не хватает? - PullRequest
0 голосов
/ 19 января 2012

Итак, у меня есть пользовательский конструктор форм. Это работает за исключением случаев, когда я хочу переопределить методы суперкласса.

Когда я делаю следующее:

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 Ответ

1 голос
/ 26 января 2013

Попробуйте просто позвонить super без аргументов.

Это вызовет версию метода ActionView :: Helpers :: FormBuilder с теми же аргументами, переданными исходному вызову.

Но если вы хотите переопределить метод, вам нужно предоставить свой собственный код. Попробуйте что-то вроде:

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

И посмотри, если звонит f.number_field(:value) распечатывает foo.

Затем начните заменять кишки вашего метода number_field на то, что вы действительно хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...