如何在rails中的某些网址上显示application.html.erb中包含的菜单?

时间:2013-03-02 12:00:46

标签: ruby-on-rails ruby-on-rails-3

我在application.html.erb中添加了一个html菜单,它在所有视图模板上显示,我想知道如何在某些页面上显示?

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

然后,

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

由于

4 个答案:

答案 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_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

答案 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