2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【rails6】controller_nameを使って、共通レイアウトの固定部分(header,footer)を、特定のページだけ色を変える。

Last updated at Posted at 2020-05-05

##背景
rails6で学習アプリのクローンを作っていて、様々なコンテンツのページに共通のfooter,headerの色を特定のコンテンツのページだけ色を変えたい。

##環境

  • Ruby 2.6.5
  • Rails 6.0.2.1

##解決法

コントローラ名で条件分岐して、付与するクラスを変更して対応する。

わかりやすく言えば、classの部分に<%= controller_name == 'users' ? デフォルトのクラス : 変更したいコンテンツ(ページ)のクラス %>
のようにして,付けるクラスがコントーラ名次第で変わるようにするのがポイント。

できれば、メソッドにしてヘルパーに処理は移動する。

###①application.html.erbheader,footer部分でstyleを入れて、controller_nameで分岐する。

application.html.erb(header)
<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">
application.html.erb(footer)
<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メソッドを定義する。

application_helper.rb
module ApplicationHelper
  require "redcarpet"
  require "coderay"

end

def nav_color
    controller_name =='users(色変更したいページのcontroller名)' ?  '#28a745(変更したいページの色)' : '#5C99FF(デフォルトの色)'
  end

###application.html.erbのbackground-colorに、nav_colorメソッドを呼び出す。

application.html.erb(header)
<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">
application.html.erb(footer)
<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」の入ったあらゆる検索切り口で、あらゆる日本語の検索先を探しましたが、「共通レイアウトの特定のページの【固定部分の色】を変える」方法は、この記事だけです。笑

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?