1
1

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 5 years have passed since last update.

Rails view の作り方 (チュートリアル3章まとめ)

Posted at

Railsチュートリアルの三章やったのでまとめてみる。(cssは今回は触れない)

Railsのview-controllerについて

RailsはMVCアーキテクチャだが、JSP-Servlet(古い…)みたいにviewに値を埋め込んで返すのではなく、コントローラがviewをレンダリングして返却する。ざっくりした図だが、下の様なイメージ。

erb

Railsのviewでは、htmlにrubyコードを埋め込む'erb'ファイルがよく使われる。
正直erbよりhamlとかの方が便利そうだけど、(hamlはタグ無しで書ける)
勉強のために、書き方がhtmlに近いerbの方を使っていく。

erbにrubyコードを埋め込むには、<% %>を使用する。
rubyコードの実行結果をタグの中に埋め込みたい場合は=をつけて<%= %>とする。

例えば、タグ内で:titleをyieldしたい時は下の様に書く

<title><%= yield(:title) %></title>

layout

Webシステムを作成する時、ページのタイトルやレイアウト等、全ページに共通する要素がいくつもある。
これを一つ一つのerbファイルに書いていくと、共通部分という時も全て編集しないといけなくなる。

例えば、10ページほどで構成されているWebページのレイアウトが変わってしまったという場合は
10ページ全てで手作業で編集する羽目になるし、バグの原因にもなりかねない
こうした共通部分をlayoutに括り出すことによって、全ページの修正を一回で済ませることができる。

provide, yield

layoutの共通部分に変数を埋め込みたい場合は、erbでprovideヘルパーを使う。
erbでprovideした変数をlayout側でyieldすると、その変数を評価してerbに埋め込まれる。
yieldに引数を与えない場合は、viewをそのまま評価する

  • layout
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %></title>
  </head>
  <body>
    <%= yield %>
  </body>
</html>
  • view
<% provide(:title, "ブログ")%>
<h1>ホーム</h1>
<p>
  修得した技術や所感をまとめていきたいと思っています。
  <a href="https://qiita.com/flowerhill">Qiitaもやってます</a>
</p>

上の様にlayoutとviewを作成すると、ブラウザからアクセスした時次の様なhtmlを生成する

<!DOCTYPE html>
<html>
  <head>
    <title>ブログ</title>
  </head>
  <body>
    <h1>ホーム</h1>
    <p>
      修得した技術や所感をまとめていきたいと思っています。
      <a href="https://qiita.com/flowerhill">Qiitaもやってます</a>
    </p>
  </body>
</html>

画面で表示するとこうなる。
スクリーンショット 2019-02-19 22.33.33.png

まとめ

RailsからControllerを呼び出した時に、どの様にViewを呼び出すか大体理解できたと思う。
erbの書き方やlayoutの使い方まで修得できた。

本当はヘルパーメソッドやテスト(rspec)の書き方もまとめたかったけど、長くなるので一旦ここまで。(正直疲れた…)

参考

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?