Прежде всего, несколько настроек вашего Ruby.
def search_page?
true
end
Вам не нужна точка с запятой или return
(какой бы последней строкой не было возвращаемое значение вашего метода).
Во-вторых, все помощники загружаются при инициализации вашего приложения. Вы можете изменить это поведение, но, вероятно, оно того не стоит.
Что касается остального, допустим, у вас есть партиал с именем _search_form.html.erb
. Создать хороший вспомогательный метод (скажем, в search_helper.rb)
def search_form
render(:partial => 'search/search_helper') unless @search_page
end
Используйте это для вызова формы поиска из вашего файла макета. С тех пор у вас есть выбор.
Вы можете создать before_filter
в своем контроллере:
before_filter :set_search_page
...your actions here...
private
def set_search_page
@search_page = true
end
Или установите переменную в вашем действии:
def some_action
@search_page = true
end
Я бы сказал, что это действительно проблема представления, а не то, что вы хотите делать в своих контроллерах. Я бы создал вспомогательный метод, подобный этому (опять же, в search_helper.rb
).
def search_page
@search_page = true
end
А потом в верхней части вашего просмотра этой страницы я бы использовал что-то вроде этого:
<% search_page %>
(Обратите внимание, что это <%
, а не <%=
- выходных данных нет.)
Преимущество здесь в том, что вы избавляете ненужные переменные экземпляра от контроллера.