🌵

【Ruby on Rails】ヘッダー/フッターが不要なページはそれらを取り除いて表示する

2024/08/16に公開

はじめに

現在スクールの卒業制作でPFを作成しております。
その中で、未ログイン前のトップページ、ユーザーの新規登録画面、ログイン画面ではヘッダー/フッターを省きました。
トップ画面のみ取り除いているこちらの記事を参考に、今回は3画面からヘッダー/フッターを削除しました。
参考になりましたら幸いです。

どう実装したか

現在ヘッダー/フッターは、app/views/layouts/application.html.erbのbodyタグ内で部分テンプレートとして呼び出しています。
application.html.erbファイルに記載しているので、現在は作成している全ファイル上でヘッダー/フッターが表示されている状態です。

コード修正前

<body>
    <% if current_user %>
      <%= render 'shared/after_login_header' %>
    <% else %>
      <%= render 'shared/before_login_header' %>
    <% end %>
    <%= yield %>
     <%= render 'shared/footer' %>
</body>

コード修正後
ログイン後
こちらの記事内容のように、'shared/after_login_header'では<% unless current_page?(root_path) %>と追記し、現在表示しているページがroot_path(トップ画面)の場合は部分テンプレートーファイルを呼び出さないようにしています。

ログイン前
未ログイン前の'shared/before_login_header'ファイルは、トップページ、ユーザーの新規登録画面、ログイン画面で呼び出さないようにしたいため、<% unless current_page?(root_path)|| current_page?(new_user_path) || current_page?(login_path) %>としています。

<body>
  <% if current_user %>
    <% unless current_page?(root_path) %>
      <%= render 'shared/after_login_header' %>
    <% end %>
  <% else %>
    <% unless current_page?(root_path)|| current_page?(new_user_path)  || current_page?(login_path) %>
      <%= render 'shared/before_login_header' %>
    <% end %>
  <% end %>
  <%= yield %>
  <% unless current_page?(root_path)|| current_page?(new_user_path)  || current_page?(login_path) %>
     <%= render 'shared/footer' %>
    <% end %>
  </body>

unless current_page?(root_path)|| current_page?(new_user_path) || current_page?(login_path)としている理由は、current_page?の引数は1つしか取れないためです。
そのため、Rubyの論理演算子の論理和「||」を使用して、複数画面にわたるヘッダー/フッターの非表示を行っています。

最後に

当初は各ページでフッター/ヘッダーのパーシャルファイルを呼び出すしかないのかと考えましたが、
この方法が可読性が高く、呼び出すファイルに漏れが生じないと感じました。
最後までご覧いただきありがとうございました。

参考

[rails]navbarやヘッダーをTOPページのみ非表示にする

Discussion