コントローラとアクションの作成とルーティングの設定
Rails アプリケーションで、コントローラーの作成とルーティングを設定する簡単なサンプルを作成します。利用者からのリクエストに対して事前に作成しておいたコントローラーのアクションを実行し、結果を利用者へ返します。
※ コントローラに関する詳細は「コントローラとアクション」、ルーティングに関する詳細は「ルーティングの設定」をご参照下さい。
(Last modified: )
コントローラを作成する
Controller(コントローラー)は、ユーザーのリクエストを受け取り、そのリクエストに応じたアクションを実行します。またアプリケーションで処理した結果をユーザーに返すのもコントローラーです。
コントローラーを作成するアプリケーションとして事前に schedule という名前でアプリケーションを作成しました。
rails new schedule
作成したアプリケーションの中にコントローラーを作成するには次のように実行します。
rails generate controller コントローラ名
それではコントローラーを実際に作成してみます。コマンドプロンプトを起動し、アプリケーションディレクトリへ移動したあと、次のようにコマンドを実行して下さい。今回はコントローラー名を plans としました。
rails generate controller plans
※ コントローラー名は複数形で指定します。 plan ではなく plans のように単語の複数形で指定してください。
コントローラーが作成されました。このとき次のようにいくつかのファイルやディレクトリが自動的に作成されます。
create app/controllers/plans_controller.rb invoke erb create app/views/plans invoke test_unit create test/controllers/plans_controller_test.rb invoke helper create app/helpers/plans_helper.rb invoke test_unit
この中の app/controllers/plans_controller.rb がコントローラ本体に関する記述がされたファイルです。
それでは作成された plans_controller.rb ファイルをテキストエディタで開いてみます。
class PlansController < ApplicationController end
このようにコントローラを作成すると ApplicationController クラスを継承し、クラス名が「コントローラ名+Controller」のクラスが定義されます(クラス名の先頭は大文字となります)。
アクションを作成する
コントローラは作成されましたのでアクションを作成していきます。 Rails アプリケーションではコントローラはクラスとして定義されましたが、アクションはコントローラクラスの中のメソッドとして定義されます。例えば hello というアクションを作成するということは hello というメソッドを定義することです。
それでは hello アクションと bye アクションを作成してみます。
class PlansController < ApplicationController def hello render :plain => 'Hello!' end def bye render :plain => 'bye!' end end
アクションを表すメソッドは public のメソッドとして定義して下さい( Ruby の場合、特に指定していない場合は public となります)。今回作成したアクションはテスト用のため、アクションが呼び出されるとビューを使わずに直接利用者へテキストを返すように作成してあります。
※ メソッドの中に記述してある「render :plain => 'Hello!'」の部分が利用者へテキストを返す部分となります。今回はコントローラやアクションのテストがメインなので、この部分の説明は行ないません。
ルーティングを設定する
最後にルーティングの設定を行います。これは利用者側からどのように呼び出されたときにどのアクションを実行するのかを定義するものです。設定はアプリケーションディレクトリの中の config\routes.rb ファイルに対して行います。
このファイルをテキストエディタで開いてみます。先頭に「#」が記載されている行はコメントです。
Rails.application.routes.draw do # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. # Can be used by load balancers and uptime monitors to verify that the app is live. get "up" => "rails/health#show", as: :rails_health_check # Defines the root path route ("/") # root "posts#index" end
自動で config\routes.rb が作成されると「get "up" => "rails/health#show", as: :rails_health_check」というルーティングだけが設定されています。詳しくは解説しませんが、ブラウザから http://localhost/up にアクセスすると、コントローラー Rails::HealthController の show アクションが実行されます。
利用者がブラウザから http://localhost:3000/hello へアクセスすると、 plans コントローラーの hello アクションが実行されるようにするには、次のように記述します(ヘルパーは省略しています)。
get 'hello', to: 'plans#hello'
同じように http://localhost:3000/bye へアクセスすると、 plans コントローラーの bye アクションが実行されるようにするには、次のように記述します。
get 'bye', to: 'plans#bye'
この 2 行を config\routes.rb の中に記述します。
Rails.application.routes.draw do # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500. # Can be used by load balancers and uptime monitors to verify that the app is live. get "up" => "rails/health#show", as: :rails_health_check # Defines the root path route ("/") # root "posts#index" get 'hello', to: 'plans#hello' get 'bye', to: 'plans#bye' end
これでルーティングの設定も完了です。
動作確認
それでは Rails アプリケーションを起動してここまでの動作を確認してみます。コマンドプロンプトを起動し、アプリケーションディレクトリへ移動し rails server と実行して下さい。
rails server
ブラウザから次の URL へアクセスして下さい。
http://localhost:3000/hello
設定されたルーティングに従い plans コントローラの hello アクションが呼び出され、画面に次のように表示されます。
今度は次の URL へアクセスして下さい。
http://localhost:3000/bye
plans コントローラの bye アクションが呼び出され、画面に次のように表示されます。
このように Rails アプリケーションを起動した後で、利用者からのリクエストに対して対応するコントローラーの中のアクションを実行し、結果を利用者へ返すことが出来ました。
-- --
Rails アプリケーションで、コントローラーの作成とルーティングを設定する簡単なサンプルを作成しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。