我在application.html.erb
中添加了一个html菜单,它在所有视图模板上显示,我想知道如何在某些页面上显示?
喜欢if path == HOME || "/page/1"
然后,
不要显示菜单,否则显示它。
由于
答案 0 :(得分:5)
在您不希望显示菜单的操作中创建实例变量,例如@hide_menu
然后,您可以在视图中对其进行过滤:
<% unless @hide_menu %>
...
<% end %>
如果你有很多变量来做这件事,对于大量的代码,你可以使用哈希,例如@config
,并在你的应用程序控制器中初始化它:
before_filter :init_config
def init_config
@config = {...}
end
<% unless @config[:hide_menu] %>
...
<% end %>
答案 1 :(得分:1)
您可以使用request.fullpath检查当前网址,这样您就可以检查您是否在家中或者if request.fullpath == HOME。
答案 2 :(得分:1)
首先使用application_controller
中before_filter
中的菜单代码作为 -
应用程序控制器:
before_filter :show_menus
def show_menus
# the menu stuff you want to show
end
然后您可以在任何不应执行before_filter
的控制器内或您不想显示菜单的地方使用以下内容 -
其他控制器:
skip_before_filter :show_menus
您甚至可以忽略before_filter
所需的任何操作。
例如 -
skip_before_filter :show_menus, :only => [:logout]
上述行不会显示您提到此行的控制器注销操作的菜单(此处为其他控制器)。
注意:此过程将避免每次操作的显示/隐藏菜单的难看的重复if else语句 -
if action_name
#show menu
else
#hide menu
end
答案 3 :(得分:1)
如果您需要根据某些逻辑隐藏菜单,可以answer使用Intrepidd。
如果您只需要在几个地方隐藏菜单或显示其他内容而不是菜单,您可以使用content_for
<强> /app/views/layouts/application.html.erb 强>
<!DOCTYPE html>
<html>
<head>
<title>my title</title>
</head>
<body>
<%= content_for?(:menu) ? yield(:menu) : (render 'layouts/menu') %>
<%= yield %>
</body>
</html>
<强> /app/views/layouts/_menu.html.erb 强>
<%= link_to "Home", root_path %> | <%= link_to "Pages", pages_path %>
<强> /app/views/pages/index.html.erb 强>
<% content_for :menu do %>
this can be whatever you want, even a blank string
<% end %>
here the content for pages/index