我遇到标准布局调用标题部分的情况。 (我认为这是相当普遍的)在标题中是一个搜索框 - 就像在stackoverlow上一样。但是,当用户在搜索页面上时,我想从标题中删除搜索框。
我尝试做的是在ApplicationHelper.rb文件中添加一个方法,如下所示:
def search_page?
return false;
end
然后在SearchHelper.rb中我有这个:
def search_page?
return true;
end
这不起作用,因为SearchHelper.rb中的search_page函数是正在使用的函数,无论控制器呈现视图的是什么。我知道我可以定义一个新的布局,并在标题部分添加一个参数,以表示不呈现搜索框,但这似乎有点过头了。
答案 0 :(得分:2)
首先,对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 %>
(请注意,它是<%
而不是<%=
- 没有输出。)
这里的优点是可以从控制器中保留不必要的实例变量。
答案 1 :(得分:1)
在您的应用程序助手中,定义此方法:
def search_page?
controller.controller_name != "search"
end
将"search"
替换为控制器的名称。