レスポンスに使う”見た目”を作る(ビュー)
〜ここまで、コントローラーにアクションを定義して、コントローラー上で処理を記述できるようにはなった。
→コントローラーは、アクションを処理した後に、対応するビューに該当するファイルを探して、レスポンスとして返す。
・ブラウザにレスポンスとして、返す見た目を決めるビュー
・アクションを実行した後に、ブラウザに表示する画面(見た目)を決める。(MVCの役割の1つ:view)
→ブラウザに表示できるのはHTMLファイルのみ。アプリとしては、データを扱って表示させたい。
・データをHTMLでも使用したいときは、rubyを埋め込むことができるERBを使用
ERB:HTMLにrubyの記述を埋め込むことができるテンプレートから、HTMLファイルを生成できるテンプレートエンジン(embedded ruby)
最終的にレスポンスに含めて返す。
・"アクション名".html.erbで作成。erbの記法を用いることで、rubyのコードを埋め込むことができる。
app/views/posts/index.html.erb
<h1>トップページ</h1>
<%= @post %>
・コントローラーで定義したインスタンス変数は、対応するビューで用いることができる
postコントローラーのindexアクションで、インスタンス変数を定義した
→ views/postsディレクトリの、index.html.erbで、そのインスタンス変数を用いることができる。
(一般的には、インスタンス変数内に、データベースから取得したデータが代入される)
・<%= %>でHTMLに埋め込むコード
・<% %>でHTMLに埋め込むが、表示はされないコード
<%= @post %> # RubyコードをHTMLに埋め込む
<% @post %> # RubyコードをHTMLに埋め込むが表示はされない
2020/09/16
______________________
Ruby on Railsにおけるビュー:コントローラーの処理後に実行される「HTMLなどのレスポンスをブラウザに表示する」機能。
・・・Action Viewという仕組みを搭載しているから。
ビューファイルは〇〇.html.erbという拡張子を持つ。
・・・テンプレートエンジンであるERBを利用することを意味し、このERBはAction Viewという仕組みに含まれている。
・Action View
ビューの機能を実現するために必要な処理のオブジェクトのこと。
ビューファイルを1つにまとめてブラウザに表示する処理は、Action Viewによって実現されている。
>>ビューの仕組み
app/viewsディレクトリの中にコントローラー名と同じディレクトリを作成し、その配下にビューファイルを設置する。
これにより、コントローラーとビューファイルを関連付けることができ、その関連付けされたビューファイルと「レイアウト」や「部分テンプレート」が組み合わさってブラウザへ表示される。
・・・ビューファイルの内容がAction Viewによってまとめられ、ブラウザに返却される。
・・・コントローラーで取得した@tweetsは、Ruby on Railsの裏側で定義される複数のメソッドを経て読み替えられ、Action Viewへ渡される。そして再度ビューファイルのインスタンス変数としてセットされ、使用できる。
______________________
・ヘルパーメソッドの仕組み
ヘルパーメソッドは、文字列としてHTMLの要素が戻り値となる。
すでに用意されているヘルパーメソッド以外に、ヘルパーメソッドを自作することもできる。
ビューファイルにおいて直接Rubyの記述を書くことはできるが、DRYの視点から見ても綺麗なコードではない。
・・・Ruby on Railsでは、Helperと呼ばれるものを使用し、ヘルパーメソッドを自作できる。
・モジュール
Rubyにおける「インスタンスを生成できないクラス」のようなもの。
module Sample # module モジュール名
class Test # モジュールの中にはクラスを定義できる
end
end
具体的なオブジェクトを生成したい場合(インスタンスを生成したい場合)はクラスを使用。
処理だけ(メソッドなど)が必要な場合はモジュールを使用する。
モジュールの中にクラスを定義することで、Testクラスが複数ある場合に、クラスごとに区別ができる。
module Sample1
class Test
end
end
module Sample2
class Test
end
end
Sample1::Test # Testクラスの呼び出しかた
Sample2::Test
・Helper
ヘルパーメソッドを作成できるモジュール。app/helpers配下に用意されている。
application_helper.rbや、各コントローラーに対応したhelperのファイルに処理を記述することで、ヘルパーメソッドとして使用できる。
module ApplicationHelper # 〇〇Helperという形で定義
def sample # sampleというヘルパーメソッド
end
end
ApplicationHelper内へ、メソッドとして定義すると、ビューファイルで使用できる。
<%= sample %>
2020/11/08
この記事が気に入ったらサポートをしてみませんか?