【Ruby on Rails】ヘッダー/フッターが不要なページはそれらを取り除いて表示する
はじめに
現在スクールの卒業制作で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の論理演算子の論理和「||」を使用して、複数画面にわたるヘッダー/フッターの非表示を行っています。
最後に
当初は各ページでフッター/ヘッダーのパーシャルファイルを呼び出すしかないのかと考えましたが、
この方法が可読性が高く、呼び出すファイルに漏れが生じないと感じました。
最後までご覧いただきありがとうございました。
Discussion