吉本集の個人ブログ
Web制作の技術について書いています。たまに日記も書きます。

【Rails】Viewの基本構造

2015年10月11日 / category : rails

色々と忙しく、約1か月振りにRailsの勉強を再開できました・・・。ほぼ忘れてるかも。
前回「こんにちわ、世界!」をとりあえず表示させてみましたので、次は出力されるHTMLの構造がどうなっているか勉強してみます。
勉強しながら記事にしているので、間違って理解している可能性が大です。

今回の記事は、前回の記事を基に書いていきます。
【Rails】とりあえず「こんにちわ、世界!」

まず、前回作成した「こんにちわ、世界!」のページですが、
コントローラクラスで次のような記述をしていました。

hello_controller.rb
class HelloController < ApplicationController
      def index
            render text: 'こんちにわ、世界!'
      end
end

赤い3行のコードをもう少し詳しく説明します。
まず、メソッドを定義する場合、次のような構文になります。

def メソッド名
処理内容
end

ということで、赤い3行ではメソッドを定義していることになりますが、コントローラクラスで定義している場合は、このメソッドを、アクションメソッドと呼ぶようです。
アクション名をindexとしているので、indexアクションメソッドということになります。

indexアクションメソッドで定義している処理内容ですが、ここでは詳しく解説しませんが、

render text: ‘こんちにわ、世界!’

renderメソッドを実行し、’こんちにわ、世界!’テキストを返している。
ということになります。

では、URLとの関係ですが、
まず、ルーティング設定でURLパターンを

match ‘:controller(/:action(/:id))’, via: [ :get, :post, :patch ]

としていることを前提として説明しています。
HTTPサーバーを起動し、

http://localhost:3000/hello/index/

にアクセスすると、helloコントローラのindexアクションメソッドが実行される仕組みになっています。
そのため、indexアクションで定義しているrenderメソッドが実行され、’こんちにわ、世界!’テキストが返されます。

ルーティング設定のURLパターンという言い方を、コントローラのアクションをどのように実行するか設定する。
と言ったほうが、わかり易いかもしれません。

さて、ここからが、今回の記事の本題です。
この「こんにちわ、世界!」ページの構成は、MVC(Model – View – Controller)の考え方から言うと、正しくはありません。
このページの構成では、helloコントローラにindexアクションメソッドを定義し、その中でrenderメソッドによってテキストを出力していますが、本来、最終的な出力はView側で行うべきです。
それでは、正しい構成に作り直してみます。

/app/views/hello/

上のフォルダに、index.html.erbファイルを生成し、格納します。
このファイルに、次のようなコードを記述します。

index.html.erb
こんちにわ、世界!

そして、indexアクションメソッドで定義した処理内容を全て削除します。

hello_controller.rb
class HelloController < ApplicationController
      def index
      end
end

これで再度、HTTPサーバーを起動し、

http://localhost:3000/hello/index/

にアクセスすると、どうでしょうか。変更前とページの表示は変わっていません。
これがどのような仕組みになっているかと言うと、
railsは、アクションメソッドを定義すると、それに該当するテンプレートファイルを参照する仕組みになっているようです。
そのテンプレートファイルの格納場所が、

/app/views/コントローラ名/アクション名.html.erb

となります。
この仕組みがMVC(Model – View – Controller)の本来の正しい仕組みです。

次回、この仕組みについて、もう少しだけ詳しく解説したいと思っています。