『Ruby on Rails5 アプリケーションプログラミング』学習日誌 2

前書き

ruby on rails 5 アプリケーションプログラミング」(山田 祥寛 著)で勉強しています。今日は第4章の途中から学習するのでその記録です。ソースコードにもコメントの形で学んだことについて注釈入れてます。

学習の範囲

p.177~198

ポイントまとめ

レイアウトテンプレート

レイアウトテンプレートとはアプリ全体を通して共通のデザインを定義するテンプレートのこと。railsにより/app/views/layouts/application.erbが自動で生成されており、これをカスタマイズすることで自由にデザインを決めることができる。全てのページを同じレイアウトにする必要がない場合はコントローラー単位やアクション単位でのレイアウトの変更も可能。例えばコントローラー単位での設定は/app/views/layouts/以下にコントローラー名.html.erbというファイルを用意する。また、コントローラークラスの中で明示的にlayoutメソッドを利用すれば引数のレイアウトを指定することもできる。さらにはコントローラーのrenderメソッドでアクション単位でのレイアウト呼び出しも可能。レイアウトテンプレートにおいてページごとに要素を変更する場合はテンプレート変数が使える。

<title><%= @title || 'Rails' %></title>

のようになるこれはもしテンプレート変数@titleがnilの場合は'Rails'が入るいうこと。これは真偽値が確定した時点で計算をやめてその時点での値を返すというrubyの性質を利用している。また、application.erbの個別のviewが埋め込まれる部分はyieldが当てられているが、これはviewをブロックに見立てているという意味になるのかな?いずれにしろ、ここで各viewの情報が受け渡されていると理解している。またprovideやcontent_forなどのヘルパーを使うことでyeildに値を持たせることもできる。親レイアウトをメソッド定義のようなものとして、子レイアウトをブロックのように捉えると、yeildの働きがわかるような気がする。親レイアウトのyeildの置かれた場所で子レイアウトが実行される。このような仕組みを利用してレイアウトを入れ子にし使用することができる。また親レイアウトには子レイアウトから継承することを明示的に記述が必要になる(条件分岐も必要)。これが無いと子レイアウトがそれを通過してきているのに、無視される。部分テンプレートはある意味レイアウトテンプレートの逆で、そのままだけど、パーツをテンプレート化するもの。ファイル名の頭に_をつけるという命名規則があり、これが無いとrailsが部分テンプレートとして認めない。

部分テンプレート

部分テンプレートはviews配下にコントローラーごととかのディレクトリを用意してまとめて管理すると良いらしい。また、viewファイルから呼び出す時はrenderで呼び出せる。この時viewsからみたパスを'books/book'のように書く。最初どこからの視点なのかわかっていなかったのでエラーを出した。ちなみにディレクトリの移動は mv dir ../ のようなコマンドで配下のファイルごと動かせる。

今日の感想

やるたびに感じることだけれどrailsすごく簡略化がなされているなと思う。少しでも記述を減らせるところはそうしようという考え方徹底しているような気がする。厳密な命名規則を前提としているからできることですね。でも省略しすぎて意味わかんなくならないかな?慣れれば最高なんだろう。命名規則もあったほうが人間にもわかりやすいし。viewは一旦ここまでで明日からはモデルについて学習する。