ume

rails provideについて

前書き

今現在rails tutorial10章に取り組んでいるのですが以前やった内容の理解度が章を重ねるごとに低いなぁと感じたため理解を深めるため復習します。 また同じようにrails tutorialに取り組んでいる方の参考になればと思い記事にしています。

目次

①provideの意味と役割.
②どういう時に使う?
③使い方.

①provideの意味と役割

provideとは日本語で「供給する」という動詞です.
役割⇨provideは『ファイルをまたいで使える「変数」のような役割を持ちコードの可読性(コードの読みやすさ)を上げる』

②どういう時に使う?

⇨同じコードが重複しないようにしたい時(リファクタリングという)⇨可読性があがる 具体例を挙げてみる 例えば 画面のhelpをクリックするとhelpのページに遷移するページがあるとします。aboutページも同様 画面上部に注目してください。 ↓ここに注目 .

↓ここに注目

上4つの画像で伝えたいことは 『ページごとに画面上部のタイトル部分が変わっている』ということです。

もしページごとにタイトルが変わるようにするためには 以下のようにコードを書く必要がある。 helpページの場合

<!DOCTYPE html>
<html>
  <head>
    <title>Help | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <h1>Help</h1>
  </body>
</html>

help.html.erbファイル内のtitleタグの中にhelpと記載する 同様にabout.html.erbファイルにいき

<!DOCTYPE html>
<html>
  <head>
    <title>About | Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
    <h1>About</h1>
  </body>
</html>

Aboutというふうに記載する必要がある。 このやり方でも『ページごとにタイトルを変化させること』はできます。 ただ全体のページの中のタイトルの一部分だけ変更したいだけなのに

<!DOCTYPE html>
<html>
  <head>
    <title>| Ruby on Rails Tutorial Sample App</title>
  </head>
  <body>
  </body>
</html>

ここの部分のコードが重複してしまっていてファイルが増えていくことを想定するとコードの量が増え読むのに時間がかかり可読性が下がる。 そういう時にprovideを使う。

③使い方.

①変数のようにhtml内に<% provide(:①好きな文字, "②好きな文字") %> と記載.
②②の好きな文字を使いたいファイル内(だいたいapplication.html.erb)で<%= yield(:①の好きな文字) %>と記載.
③重複しているコードをabout.html.erbとhelp.html.erbから削除

コードで見てみよう application.html.erbに<%= yield(:①の好きな文字) %>

①<% provide(:title, "Help") %> 
#titleという変数にHelpを代入しているイメージです
<!DOCTYPE html>
<html>
  <head>
    <title>②<%= yield(:title) %>| Ruby on Rails Tutorial Sample App</title>
#titleの中に入ったHelpを使いたい場合はさっき作ったtitleをyield(:title) の引数に入れる。
yieldはtitleの中身表示してという意味
  </head>
  <body>
  <%= yield %>
#各viewファイル(aboutやhelpファイルが1個ずつここに入るイメージ)
  </body>
</html>

補足.
application.html.erbの仕組み