Вспомогательный метод с тем же именем, что и partial

У меня есть помощник с методом с именем search_form, например:

module Admin::BaseHelper
  def search_form(*args)
    # my great code here
  end
end

Чтобы вызвать этот метод в моем коде HAML, я могу сделать следующее:

= search_form
= search_form()
= search_form(param1: "value1", param2: "value2"...)

Моя проблема с этим первым звонком. Когда я делаю это в любом файле HAML, он отображает мой помощник. За исключением случаев, когда имя моего файла _search_form.html.haml. В этом случае возвращается nil.

Если я помещаю ошибку повышения в помощник, я замечаю, что мой метод не вызывается, но я не могу найти, что вызывается и почему.

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

Итак, мой вопрос: это стандартное поведение Rails или ошибка?


person Naremy    schedule 28.09.2013    source источник
comment
Что значит не работает? Вы получаете ошибку?   -  person Leo Correa    schedule 28.09.2013
comment
Я отредактировал вопрос. Под работой я подразумеваю: она вызывает мою вспомогательную функцию.   -  person Naremy    schedule 28.09.2013


Ответы (1)


По умолчанию Rails будет искать локальную переменную с тем же именем, что и у вашего партиала, что может конфликтовать с существующими именами методов.

Один из способов обойти это — просто переопределить метод внутри партиала:

<% search_form = self.search_form %>
# Rest of the partial's code
person Marcelo De Polli    schedule 28.09.2013