Just do IT

思うは招く

Ruby on Rails でコントローラーを作成する基本

やること

  • Rails でコントローラーを作成する基本をおさらい

環境

前提

  • 以下の画面にアクセスできていること

f:id:K_Koh:20200115120643j:plain

k-koh.hatenablog.com

手順

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の概念に従ってビューを分離するのが一般的。