content_forとyieldと三項演算子とデフォルト引数【28/30 2nd】
こんにちは、たわらです。
本記事は、タイトルページを動的に変更したときに学習したメソッドについて紹介します。
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 にはいろいろ便利メソッドがあるのですね。
読んでくださったかた、ありがとうございます。