3

application.html.erbすべてのビュー テンプレートでそれを表示する html メニューを含めました。

お気に入り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を確認できるため、たとえば、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 に答える