##背景
rails6で学習アプリのクローンを作っていて、様々なコンテンツのページに共通のfooter,headerの色を特定のコンテンツのページだけ色を変えたい。
##環境
- Ruby 2.6.5
- Rails 6.0.2.1
##解決法
コントローラ名で条件分岐して、付与するクラスを変更して対応する。
わかりやすく言えば、class
の部分に<%= controller_name == 'users' ? デフォルトのクラス : 変更したいコンテンツ(ページ)のクラス %>
のようにして,付けるクラスがコントーラ名次第で変わるようにするのがポイント。
できれば、メソッドにしてヘルパーに処理は移動する。
###①application.html.erb
のheader,footer
部分でstyle
を入れて、controller_name
で分岐する。
<nav class="navbar navbar-expand-lg navbar-dark fixed-top" style="background-color: <%= controller_name == 'users(色変更したいページのcontroller名)' ? '#28a745(変更したいページの色)' : '#5C99FF(デフォルトの色)' %>">
<%= link_to "Gyakuten", root_path, class: "navbar-brand" %>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#nav1" aria-controls="nav1" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-around" id="nav1">
<ul class="navbar-nav">
<nav class="navbar navbar-expand navbar-dark fixed-bottom justify-content-center" style="background-color: <%= controller_name == 'users' ? '#28a745' : '#5C99FF' %>">
<ul class="navbar-nav">
<li nav-item><a href="#" class="nav-link active">ブログ</a></li>
<li nav-item><a href="#" class="nav-link active">youtube</a></li>
</ul>
</nav>
</footer>
(※※application_helper.rb
でのcontroller名の書き方〜
例として、「Users.controller.rb」の場合は、「users
」)
これだけでも実装はされます。
ここから、controller_name
をメソッドにして処理をhelper
に移動します。
###②application_helper.rb
で、nav_color
メソッドを定義する。
module ApplicationHelper
require "redcarpet"
require "coderay"
end
def nav_color
controller_name =='users(色変更したいページのcontroller名)' ? '#28a745(変更したいページの色)' : '#5C99FF(デフォルトの色)'
end
###application.html.erb
のbackground-colorに、nav_color
メソッドを呼び出す。
<nav class="navbar navbar-expand-lg navbar-dark fixed-top" style="background-color: <%= nav_color %>">
<%= link_to "Gyakuten", root_path, class: "navbar-brand" %>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#nav1" aria-controls="nav1" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-around" id="nav1">
<ul class="navbar-nav">
<nav class="navbar navbar-expand navbar-dark fixed-bottom justify-content-center" style="background-color: <%= nav_color %>">
<ul class="navbar-nav">
<li nav-item><a href="#" class="nav-link active">ブログ</a></li>
<li nav-item><a href="#" class="nav-link active">youtube</a></li>
</ul>
</nav>
このように、色変更のために定義したメソッドは、ヘルパーに移動しておくと、もし色を変更したい場合に1箇所変えるだけで済みます。
#あとがき
controller_name
を使って、特定のページの固定部分の色を変える。
検索してもありそうでなかったので、ここで解決方法をまとめておきます。「controller_name
」の入ったあらゆる検索切り口で、あらゆる日本語の検索先を探しましたが、「共通レイアウトの特定のページの【固定部分の色】を変える」方法は、この記事だけです。笑