質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

1回答

1772閲覧

RailsTutorial、第4章に関する質問です。

cheeeeeeese

総合スコア179

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2015/09/02 08:57

下記のCodeはfull_titleヘルパーを生成して、その文字列をapplication.html.erbに反映させる内容となっています。

この時、full_titleヘルパーには引数として、yieldと:titleがあります。
ただ、この:titleがなぜ存在するに必要があるのかが理解できていません。

お教え頂ければ幸いです。

宜しくお願い申し上げます。

<!DOCTYPE html> <html> <head> <title><%= full_title(yield(:title)) %></title> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> <%= csrf_meta_tags %> </head> <body> <%= yield %> </body> </html>
module ApplicationHelper # Returns the full title on a per-page basis. #full_titleヘルパーを定義する。引数のpage_titleにはbase_titleをif文内で処理して欲しいため、空にしておく def full_title(page_title = '') #base_titleに記述した文字列を代入する base_title = "Ruby on Rails Tutorial Sample App" もし、page_titleが空だったら、base_titleを返す if page_title.empty? base_title #それ以外は, page_title + " | " + base_titleを返す else page_title + " | " + base_title end end end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

まず、application.html.erb

erb

1<html> 2 <head> 3 <title><%= yield :title %></title> 4 </head> 5 <body> 6 <%= yield %> 7 </body> 8</html>

となっていて、

erb

1<% content_for :title do %> 2 マイページ 3<% end %> 4<p>ここはマイページです</p>

というファイルを表示させようとすると、

html

1<html> 2 <head> 3 <title>マイページ</title> 4 </head> 5 <body> 6 <p>ここはマイページです</@> 7 </body> 8</html>

というHTMLに変換されることは理解していますか?


通常のWebサイトのページタイトルは、ページ詳細のタイトルとサイト全体のタイトルの両方を表示するのが慣習となっています。

例えばこのページのタイトルは「RailsTutorial、第4章に関する質問です。(15572)|teratail」となっており、
このサイトを例に取れば、全ページに「teratail」という文字を表示しているわけです。

cheeeeeeese さんのコードで表現すると

ruby

1 def full_title(page_title = '') 2 #base_titleに記述した文字列を代入する 3 base_title = "teratail" 4 # もし、page_titleが空だったら、base_titleを返す 5 if page_title.empty? 6 base_title 7 #それ以外は, page_title + " | " + base_titleを返す 8 else 9 page_title + " | " + base_title 10 end 11 end

という関数を定義しておき、

各ページでは

erb

1<% content_for :title do %> 2 RailsTutorial、第4章に関する質問です。(15572) 3<% end %>

のように書けば、自動的に後ろに「 | teratail」と表示されるようになります。

(正確に言えばこういうコードでしょうけど)

erb

1<% content_for :title do %> 2 <%= @question.title %>(<%= @question.id %>) 3<% end %>

投稿2015/09/03 04:14

編集2015/09/03 04:16
hello-world

総合スコア1342

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問