3

我已经包含了一个 html 菜单,application.html.erb其中在所有视图模板上显示它,我想知道我怎么不能在某些页面上显示?

if path == HOME || "/page/1"

然后,

不要显示菜单,否则显示它。

谢谢

4

4 回答 4

5

例如,在您不希望菜单出现的操作中创建一个实例变量@hide_menu

然后,您可以在视图中对其进行过滤:

<% unless @hide_menu %>
...
<% end %>

如果您有很多变量来执行此操作,对于大量代码,您可以使用哈希,@config例如,并在您的应用程序控制器中初始化它:

应用控制器

before_filter :init_config

def init_config
  @config = {...}
end

看法

<% unless @config[:hide_menu] %>
  ...
<% end %>
于 2013-03-02T12:04:25.383 回答
1

您可以使用 request.fullpath 检查当前的 url,因此您可以使用 if request.fullpath == HOME 来检查您是否在家或任何地方。

于 2013-03-02T12:09:34.147 回答
1

首先在as-中使用菜单代码application_controllerbefore_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
于 2013-03-02T12:58:26.173 回答
1

如果您需要基于某些逻辑隐藏菜单,您可以使用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
于 2013-03-02T15:45:02.097 回答