LoginSignup
1
0

More than 1 year has passed since last update.

[Rails] MVCモデルを深掘る~View編~

Posted at

はじめに

※基本的なMVCの考え方や使い方はこの記事には記載していません。

Railsで用いられているMVCモデルの考え方。始めてRailsに触れたときは本当に理解に苦しめられました。
今でこそ、なんとなく使い方がわかってきて、コントローラーで各アクションを定義してその対応するビューを作ってあげてみたいにやってますけど、なんとなくなんです。なんとなくじゃダメだ!って思いまして。。。

今回から3回にわたってM(モデル)、V(ビュー)、C(コントローラー)それぞれの仕組みを深掘りしていきたいと思います。
今回はビューを掘り下げていきます!よろしくお願いします。

Action View

HTMLなどのレスポンスをブラウザに表示するビューの機能はAction Viewという仕組みによって実現されています。ビューファイルで使うerbの拡張子を持つファイルはAction Viewの仕組みに含まれているERBを利用しています。

ControllerとViewの関係

Railsアプリケーションでは、app/viewsディレクトリの中にコントローラー名と同じ名前のディレクトリが作成されることによって、コントローラーとその対応するビューが関連づけられています。そしてビューファイルがブラウザへ返されるまでに、その対応したビューファイルにレイアウトや部分テンプレートも組み合わさって表示されます。ビューファイルがそのままブラウザに返されているわけではなく、Action Viewによってまとめられてから返されているのです。

controllerとviewの関係といえば、コントローラーで定義したインスタンス変数が対応したviewの中でも使用できますよね。これは、ただ単純にコントローラーに定義したから対応したビューで使えるといったことではなく、Railsの中で定義されている複数のメソッドたちを通して、読み替えられ、Action Viewに渡されています。そしてもう一度ビューファイルのインスタンス変数としてセットされて、使えているという仕組みです。

感覚的にcontrollerで定義したからviewでインスタンス変数が使えていますし、その表現が間違っているわけでもないですが、Railsに搭載されている様々なメソッドによってcontrollerで定義したものがviewで使えるんだということは頭の片隅に置いとくべきですね。

本当の意味で仕組みを理解するためにはRails自体を構築しているソースコードを読み解く必要があるようですが。。。

ヘルパーメソッド

ビューファイルの中でよく使うlink_toやform_withらはヘルパーメソッドと言い、あらかじめ定義されている処理です。
ヘルパーメソッドは自分で作ることもできます。
ERBタグを使ってRubyの記述をビューファイルに書くことはできますが、一連の処理をビューファイルに書くよりも、ヘルパーメソッドを自分で作ってまとめた方がすっきりとしたコードに見えます。

ヘルパーメソッドを作成するためにはHelperというモジュールを使います。

モジュール

Rubyのクラスみたいなものです。しかしモジュールはインスタンスを生成できません。
下記のように定義します。

module モジュール名

end

モジュールの中にクラスを定義することも可能です。

module Sample
  class Test
  end
end

上記の例でTestクラスを呼び出す。↓

Sample::Test

インスタンスを生成したいときはクラスを使い、処理だけが必要な時にモジュールを使うという認識でOKです。

モジュールの中にクラスを定義することで、もし上記の例でTestクラスが複数あったら、下記のように区別ができます。

module Sample1
 class Test
 end
end

module Sample2
 class Test
 end
end

Sample1::Test
Sample2::Test

Helper

ヘルパーメソッドを作るためのモジュールです。
app/helperの配下に用意されています。application_helper.rbや各コントローラーに対応したhelperファイルに処理を定義することでヘルパーメソッドとして使えます。

application_helper.rb
module ApplicationHelper
  def sample
    # sampleというヘルパーメソッドです
  end
end

1行目に注目してください。実際には◯○Helperと定義されています。
また、上記のようにヘルパーメソッドを定義したら下記のようにビューファイルで使用できます。

index.html.erb
<%= sample %>

ビューファイルにRubyの処理を長々と書いたり、同じ処理を繰り返し使う場合はヘルパーメソッドとして切り出した方が好ましいです。

最後に

自分で書いときながら、オリジナルアプリでビューファイルにガッツリRubyの処理を書いていて、反省です。モジュールについて学んだことは完全にスコーンと頭から抜けていたのでいい振り返りになりました。今回のことを実際に活かしていけるようにしていきたいですね。

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