content_forとyieldと三項演算子とデフォルト引数【28/30 2nd】
June 11, 2020
こんにちは、たわらです。
本記事は、タイトルページを動的に変更したときに学習したメソッドについて紹介します。
yield メソッドと content_for メソッド
yeild
メソッドは、view を挿入するべき場所を指定できます。そして、キーをつけてあげると、下記のように、yield
する場所を複数に設定できます。
application.html
<html>
<head>
<title><%= yield :head %></title>
</head>
<body>
<%= yield %>
</body>
</html>
content_for
メソッドを使うと、名前(キー)付きの yield ブロックを生成し、一致するキーをもつyield
の場所に挿入することができます。view ファイルにこんな感じで記述します。
<% content_for(:title,'ログイン | hogeアプリ ')%>
そうすると、html 構造が、こうなります。
application.html
<html>
<head>
<title>ログイン | hogeアプリ</title>
</head>
<body>
・・・
</body>
</html>
すごいですね、、、便利だ。
デフォルト引数と三項演算子
ただ、これだとページタイトルを変えるたびに、hoge | hogeアプリ
といちいち記述しないといけません。| hogeアプリ
をなんとかしたいです。
それにトップページには hogeアプリ
とだけタイトルに記載したいです。
そこでこんなふうに、 yield メソッドの戻り値を引数に持つメソッドを、モジュールに作成します。
application.html
<html>
<head>
<title><%= page_title(yield(:title)) %></title>
</head>
<body>
<%= yield %>
</body>
</html>
モジュールで作るメソッドはこんな感じ。
module HogeHelper
#ページタイトルを返すメソッド
def page_title(page_title = '')
#使いやすいようにローカル変数にする
base_title = 'hogeアプリ'
#三項演算子の活用。
page_title.empty? ? base_title : page_title + "|" + base_title
end
end
で、ここで、デフォルト引数
が登場しています。page_title(page_title = '')
の= ''
ですね。
デフォルト引数というのは、メソッドの引数に何もなかったら〇〇を代入してね、ということを指示できます。
なのでこの場合、引数がなかったら空文字を入れる、という指示していることになります。
続いて、page_title.empty? ? base_title : page_title + "|" + base_title
にて三項演算子が出てきます。
三項演算子というのは、式 ? trueだった場合の処理 : falseだったときの処理
と書きます。
なのでこの場合、引数の値が空か否かで処理を分けています。ログインなどの文言が入れば、ログイン | hogeアプリ
と自動的に入るということですね。
最後に
rails にはいろいろ便利メソッドがあるのですね。
読んでくださったかた、ありがとうございます。