我已经包含了一个 html 菜单,application.html.erb
其中在所有视图模板上显示它,我想知道我怎么不能在某些页面上显示?
像if path == HOME || "/page/1"
然后,
不要显示菜单,否则显示它。
谢谢
我已经包含了一个 html 菜单,application.html.erb
其中在所有视图模板上显示它,我想知道我怎么不能在某些页面上显示?
像if path == HOME || "/page/1"
然后,
不要显示菜单,否则显示它。
谢谢
例如,在您不希望菜单出现的操作中创建一个实例变量@hide_menu
然后,您可以在视图中对其进行过滤:
<% unless @hide_menu %>
...
<% end %>
如果您有很多变量来执行此操作,对于大量代码,您可以使用哈希,@config
例如,并在您的应用程序控制器中初始化它:
before_filter :init_config
def init_config
@config = {...}
end
<% unless @config[:hide_menu] %>
...
<% end %>
您可以使用 request.fullpath 检查当前的 url,因此您可以使用 if request.fullpath == HOME 来检查您是否在家或任何地方。
首先在as-中使用菜单代码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
如果您需要基于某些逻辑隐藏菜单,您可以使用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