いよいよ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になっていた。そしてアクションは、index
、new
、show
、edit
、create
、update
、destroy
の7つが作られる。すごすぎる。これがフレームワークというやつなのか。
最初にscaffold
からやったから混乱した。scaffoldは「土台」という意味。処刑台っていう意味もあるみたいだけど…
手動で新しいページを作る
新しいページを作るとき、すでにあるモデルやコントローラを使う場合は上記のようなコマンドが使えない。そういうときは、自分でビュー(erbファイル)を作り、コントローラにアクションを追加し、ルーティング(app/config/routes.rb)を記述する必要がある。
参考サイト
Railsの教科書をやったあと、現場で使える Ruby on Rails 5速習実践ガイドに挑んで4章で撃沈したところ、Progateに救われた。やっぱり初心者の味方Progate、1年前から課金していていろんなコースをやったが特にRailsは分かりやすい!scaffoldを使わず一つひとつ理解しながら進められる。まだ半分残ってるので頑張ります。