やること
- Rails でコントローラーを作成する基本をおさらい
環境
前提
- 以下の画面にアクセスできていること
手順
Railsのおおまかな作成手順
- ブラウザからのリクエストを受け取るコントローラーを作る
- モデルから対応するデータを取り出す
- 取り出したデータをビューへ渡し、ブラウザへ出力する
つまりMVCの概念に従っている。
Railsアプリの新規作成をする
Railsプロジェクトを作成する。
rails new プロジェクト名(ディレクトリ名)
アプリケーションサーバーを起動し、デフォルトのトップページを表示する。
rails s
※仮想環境で動かしている場合はこのコマンドでは動かない。
Rails 6 で rails s をするとWebpackerエラーが出たので解決 - オランウータンとぼく
コントローラーの作成
/users
というURLにアクセスしたら、そのリクエストを最初に受け取るのがコントローラーになる。
Railsにはアプリ開発に必要なファイルを自動で作成してくれる機能がある。
rails generate(省略形 g) [自動生成する種別] [種別ごとの指定]
たとえば、ジェネレーターでコントローラーを作成する場合は次のようになる。
rails generate [コントローラー名] [アクション名]
アクション名とは、コントローラーが持つメソッドのこと。
なお、省略してこう書くことも可能。
rails g [コントローラー名] [アクション名]
これでコントローラーが作成される。
コントローラーにアクションを記述
作成されたファイル例
cat app/controllers/users_controller.rb
class UsersController < ApplicationController end
ここにアクションの内容、つまりメソッドを定義する。
class UsersController < ApplicationController def index render plain: "Hello, Muscle!" end end
- render: コントローラーに備わっているメソッド。クライアントに返すレスポンスを定義する
- plain: renderで指定されたテキスト形式
ルーティング情報を設定
「〜のURLにリクエストがあったら、この処理を返そうかー」てな感じでルーティングを設定する。 ここでいう処理とは、さきほど定義したアクションのこと。
次のファイルを開く。
config/routes.rb
Rails.application.routes.draw do # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html end
以下のように追記。
Rails.application.routes.draw do # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html get "/users", to: "users#index" ← 追記 end
何をしているか。
get "/users", to: "users#index"
/users
にgetアクセスがきたら、usersコントローラーのindexアクションが実行されるように定義している。
これでサーバーを起動し、localhost:3000/users
や、もしくは仮想環境を使っている私の場合はhttp://192.168.33.10:3000/users
へアクセスすると、次のように表示される。
Hello, Muscle!
しかし、このままではビューとコントローラーが分離していないので、この状態は望ましくない。 デザイナーが変更しやすくしたり、そもそもの管理をしやすくするため、MVCの概念に従ってビューを分離するのが一般的。