いーほろよいの技術ブログ

IT技術ブログになります。

Ruby on Railsのお勉強 〜お問い合わせフォーム編(Controller) その4〜

はじめに

前回の作業でテーブルとモデルの準備ができたので、今回はフロントまわりのコントローラーをやってみたいと思います。

コントローラーについては入力(index)、確認(confirm)、送信(thanks)ページ構成を考えております。

この過程でパラメータの受け渡しや、テーブルへの書き込みなどを学んでいきたいと思うのですが、全部やると長いため、今回はコントローラーのgenerateとルーティング(config/routes.rb)に絞ります。

↓テーブル、モデルの準備はこちらの記事で確認できます。

e-horoyoi.hatenablog.com

 

コントローラー準備

index、confirm、thanksの作成

"rails generate"で作成していきます。

コマンドは下記の通りです。

>bundler exec rails g controller inquiry index confirm thanks

これを実行すると関連するファイルが作成されます。

色々と作成されるのですが、今回は実際のアクションに関わるファイルだけ取り上げます。

ルーター(作成というより更新)

リクエストされた"お問い合わせのURL"を、どのコントローラーのアクションに誘導するのか指定する設定ファイルです。

config/routes.rb

コントローラーをgenerateしたばかりの時は単純なルーティングしか用意されません。

変更前
Rails.application.routes.draw do get 'inquiry/index' get 'inquiry/confirm' get 'inquiry/thanks'

しかし、お問い合わせページ遷移時のURLに"index有り無し対応"、入力時に戻るなども発生するので"indexアクションはGET、POSTを受け付けられる"ようにしたいといった要望が出てくると思うので、下記のように書き換えます。

変更後
Rails.application.routes.draw do match 'inquiry' ,to: 'inquiry#index', via: [:get, :post] match 'inquiry/index' ,to: 'inquiry#index', via: [:get, :post] post 'inquiry/confirm' post 'inquiry/thanks'

 

ルーティングについては↓こちらに詳しい説明があります。

railsguides.jp

ですが、入門で読むにはちょっと難しいかも...ルーティングを実装している何かしらのフレームワークを体験していれば、ある程度は見当がつくのですがRailsのルーティングはやれる事が多すぎて戸惑います。

とりあえず、設定したら下記のコマンドで意図した動きになるか確認が必要です。

>bundler exec rake routes

結果
Prefix Verb URI Pattern Controller#Action inquiry GET|POST /inquiry(.:format) inquiry#index inquiry_index GET|POST /inquiry/index(.:format) inquiry#index inquiry_confirm POST /inquiry/confirm(.:format) inquiry#confirm inquiry_thanks POST /inquiry/thanks(.:format) inquiry#thanks

 

コントローラークラス

お問い合わせのリクエストを受けるコントロールクラスです。

このクラスの中にindex、confirm、thanksアクションメソッドが存在します。

app/controllers/inquiry_controller.rb

 

出力テンプレートファイル

受けたリクエストをレスポンス(HTML形式で)するためのテンプレートファイルです。

app/views/inquiry/index.html.erb

app/views/inquiry/confirm.html.erb

app/views/inquiry/thanks.html.erb

 

これでコントローラーの準備は整いました。

次は実際にHTMLを組んでDBへ書き込みまで出来れば良いかな?っといった感じです。

 

以上、最後まで読んでいただきありがとうございます。