Ruby on Rails5でコントローラーからテンプレートの表示

今回はRuby on RailsのでMVCの部分をやろうと思います。

最終的にはECサイトを作成したいと思います。

 

環境

OS/ミドルウェア バージョン
CentOS 7.2.1511
ruby 2.4.2p198
Rails 5.1.4

 

コントローラの作成

それではまずコントローラを作成します。「(Railsアプリケーションのルート)」ディレクトリに移動し、以下のようにコマンドを実行して下さい。

[コントローラ]

私の場合は「shoppings」コントローラを作成します。

※名前は複数形にします。

コチラを参考→コントローラの作成と命名規則(命名規約)

[実行結果]

上記のようにいくつかのファイルが自動的に作成されます。

この中の「app/controllers/shoppings_controller.rb」がコントローラ本体に関する記述がされたファイルです。

[ファイルの確認]

[実行結果]

それでは作成された「shoppings_controller.rb」ファイルの中身を見てみます。

[ファイルの中身]

このようにコントローラを作成すると「ApplicationController」クラスを継承し、名前が「コントローラ名+Controller」のクラスが定義されます(クラス名の先頭は大文字となります)。

 

アクションの作成

コントローラは作成されましたのでアクションを作成していきます。Railsアプリケーションではコントローラはクラスとして定義されましたが、アクションはコントローラクラスの中のメソッドとして定義されます。例えば「index」というアクションを作成するということは「index」というメソッドを定義することです。

それでは「index」アクションと「commodity」アクションを作成してみます。

[ファイルの中身]

アクションを表すメソッドはpublicのメソッドとして定義して下さい(Rubyの場合、特に指定していない場合はpublicとなります)。今回作成したアクションはテスト用のため、アクションが呼び出されるとビューなどを使わずに直接利用者へテキストを返すように作成してあります。

render:plainオプションを使用すると、平文テキストをマークアップせずにブラウザに送信することができます。

※ メソッドの中に記述してある「render plain: ‘ホーム画面処理記載’」の部分が利用者へテキストを返す部分となります。

 

ルーティングの設定

最後にルーティングの設定を行います。これは利用者側からどのように呼び出されたときにどのアクションを実行するのかを定義するものです。設定はアプリケーションを作成すると自動的に作成される「(Railsアプリケーションのルート)/config/routes.rb」ファイルに対して行ないます。

[ファイルの確認]

[実行結果]

[ファイルの中身]

利用者がブラウザから「http://☓☓☓.☓☓.☓☓☓.☓☓:3000/」を開いた時に「shoppings」コントローラの「index」アクションが呼び出され、「http://☓☓☓.☓☓.☓☓☓.☓☓:3000/commodity」を開いた時に「commodity」アクションが呼び出されるようにルーティングを定義します。

[ファイルの中身]

 

動作確認

それではRailsアプリケーションを起動してここまでの動作を確認してみます。ターミナルを起動し、起動させたいアプリケーションのルートディレクトリに移動して下さい。そして下記のコマンドを実行して下さい。

[Railsサーバ起動]

ブラウザから次のURLへアクセスして下さい。

[index]

今度は次のURLへアクセスして下さい。

[commodity]

このようにRailsアプリケーションを起動した後で、利用者からブラウザ経由でリクエストを送信し、それによってアクションを実行し結果を利用者へ返すことが出来ました。

 

テンプレートの作成

コントローラを作成した時にアクションを同時に作成しなかった場合は手動でテンプレートを作成する必要があります。

テンプレートを作成する場所は決まっています。今回は「shoppings」コントローラで作成したアクションに対するテンプレートですので、「app/views/shoppings/」ディレクトリに作成します。

[ファイルの作成]

テンプレートファイル名は「(アクション名).html.erb」とします。今回は「index」アクションと「commodity」アクションのうち、「index」アクションに対するテンプレートを作成します。ファイル名は「index.html.erb」となります。

[ファイルの中身]

テンプレートファイルに記述された内容は利用者に返されブラウザ上で表示されます。

 

アクションからのテンプレートの呼び出し

通常利用者へ結果を返すのは全ての処理が終わってからとなりますので、indexメソッドの最後に次のように記述してビューを呼び出します。(今回は事前の処理が無いので呼び出しだけとなっています)。

[ファイルの中身]

このように記述した場合はテンプレートとして「app/views/shoppings/index.html.erb」ファイルが呼び出されます。ただし、呼び出すビューが「app/views/コントローラ名/アクション名.html.erb」で作成されたファイルの場合は render メソッドを省略できます。その為、単に次のように記述することができます。

[ファイルの中身]

この場合、アクションが呼び出されるとメソッド内の処理が順に行われた後で、最後にアクションに対応するテンプレートが呼び出されます。

では「app/controllers/shoppings_controller.rb」ファイルの中身を上記のように書き換えました。

 

動作確認

それではRailsアプリケーションを起動してここまでの動作を確認してみます。ターミナルを起動し、起動させたいアプリケーションのルートディレクトリに移動して下さい。そして下記のコマンドを実行して下さい。

[Railsサーバ起動]

ブラウザから次のURLへアクセスして下さい。

[index]

このようにテンプレートを利用して作成したHTML文書を利用者へ返しブラウザ上に表示させることができました。

 

補足:共通レイアウトの適用

実行結果を、ブラウザの[ソースの表示]から確認してみましょう。

テンプレートファイル(index.html.erb)で定義したものよりも随分多くのコンテンツが出力されていることが確認できます

これら自動で付与されているコンテンツは、実は/app/views/layouts/application.html.erbで定義されているものです。

application.html.erb

Railsではデフォルトで、application.html.erbの「< % = yield % >」に個別のテンプレートを埋め込んだ上で、最終的な出力を生成します。application.html.erbのことをレイアウトテンプレート、あるいは単にレイアウトと呼びます。

 

Ruby on Rails5で環境構築

Ruby on Rails5でソースをGitLab管理

NetBeansでRubyを使う方法

Ruby on Rails5でコントローラーからテンプレートの表示

Ruby on Rails5でモデルの作成とデータベースの利用

Ruby on Rails5で画像に対してリンク設定

Ruby on Rails5で検索フォーム作成

Ruby on Rails5でselect2を使う方法

Ruby on Rails5でBootstrap4デザインにする

Ruby on Rails5で検索フォームと一体型になった検索ボタン作成方法

Ruby on Rails5でFontAwesomeを導入する方法(アイコンが使用可能)

Ruby on Rails5でBootstrap4のナビゲーションバーを使用する方法

Ruby on Rails5でBootstrap4のナビゲーションバーに画像(ロゴ)を設置

Ruby on Rails5でBootstrap4を使用しながらCSSを使用する

Ruby on Rails5でBootstrap4のドロップメニューをホバー表示する方法

Ruby on Rails5でBootstrap4のドロップメニューログインアイコンを作成

Ruby on Rails5でBootstrap4のドロップメニューでカートアイコンを作成

Ruby on Rails5でBootstrap4のドロップメニューで注文履歴を作成

 

投稿者: samancha