rails g scaffold で何が起きるのか

いよいよRailsの学習に入った。

今までProgateなどを含めRailsは全く触ったことがなく、今月19日に初めてインストールした。

Railsは簡単すぎるみたいな話ばかり聞いていたのだが、コマンド1個実行しただけでバーっと数えきれないぐらいファイルができて意味がわからない。

ということで整理した。

モデルを作る

$ bin/rails g model User name:string email:string  #gはgenerateの省略形
$ bin/rails g model モデル名 カラム名:データ型 カラム名:データ型

このコマンドを実行すると、Userモデル(app/models/user.rb)とマイグレーションファイル(db/migrate/2020XXXXXXXXXXcreate_users.rb)ができる。

モデルとはデータベースとのやりとりをするためのクラスで、バリデーション(データ形式のチェック)などはここに書く。

マイグレーションファイルはデータベースの設計図のようなもの。$ rails db:migrateを実行したときの1回だけ使われる。この例では、string型のnameカラムとemailカラムを持ったusersテーブルが作成される。テーブル名は自動的にモデル名を複数形にした名前になる。

コントローラを作る

$ bin/rails g controller users index
$ bin/rails g controller コントローラ名 アクション名

このコマンドを実行すると、indexアクション(メソッド)を持ったusersコントローラ(app/controller/users_controller.rb)ができる。アクションでは、ビューに渡したいデータをインスタンス変数に入れたりリダイレクトを設定したりする。

そして、実はコントローラだけでなく、ビューのファイル(app/views/users/index.html.erb)が作られ、ルーティング(app/config/routes.rb)も追記される。

ルーティングは自動的に以下のようになるので、必要に応じて編集する。

get "users/index" => "users#index"

これは、users/indexにアクセスすると、users#indexつまりusersクラスのindexアクションが呼ばれるということ。

モデル・ビュー・コントローラをまとめて作る

(復習1)モデルとマイグレーションファイル作成

$ bin/rails g model User name:string email:string

(復習2)コントローラとビューとルーティング

$ bin/rails g controller users index

上の2つを一気にやれるコマンドが scaffold

モデル・ビュー・コントローラ・ルーティング・マイグレーションファイル作成

$ bin/rails g scaffold user name:string email:string

実際やってみたところ、モデル名は単数形Userで、テーブル名やコントローラ名は自動で複数形usersになっていた。そしてアクションは、indexnewshoweditcreateupdatedestroyの7つが作られる。すごすぎる。これがフレームワークというやつなのか。

最初にscaffoldからやったから混乱した。scaffoldは「土台」という意味。処刑台っていう意味もあるみたいだけど…

手動で新しいページを作る

新しいページを作るとき、すでにあるモデルやコントローラを使う場合は上記のようなコマンドが使えない。そういうときは、自分でビュー(erbファイル)を作り、コントローラにアクションを追加し、ルーティング(app/config/routes.rb)を記述する必要がある。

参考サイト

Railsの教科書をやったあと、現場で使える Ruby on Rails 5速習実践ガイドに挑んで4章で撃沈したところ、Progateに救われた。やっぱり初心者の味方Progate、1年前から課金していていろんなコースをやったが特にRailsは分かりやすい!scaffoldを使わず一つひとつ理解しながら進められる。まだ半分残ってるので頑張ります。

prog-8.com