5/11 8:10
・scaffoldジェネレータを使用しアプリケーションを生成
*データモデルを設計
手戻りが防げて便利な為、最初に行う
↓でアプリケーションを生成
rails generate scaffold モデル名 カラム:データ型
↓マイグレート
rails db:migrate
エラー発生
rails generate scaffoldでファイルを作成した後に処理をやり直そうとしたらつまづいたのでまとめ。
事象
/usersが開けなかった
原因
scaffoldを作成したときにrouteが自動生成される。
AWSから↑を反映しますか?とポップが出たが、
routeを反映しないを選択してしまった。
エラーが出たときの処理概要
$ rails generate scaffold hoge
$ rails db:migration
$ rails destroy scaffold hoge
$ rails generate scaffold hoge
$ rails db:migrate (エラー)
調べてわかったこと
rails generateで作成されたファイルは、rails destroyで削除できるが、削除前にマイグレーションしたかどうかで元に戻す手順が違う。
対応策1:マイグレーション前にファイル削除実行
$ rails generate scaffold hoge
$ rails destroy scaffold hoge
対応策2:マイグレーション後はロールバックしてから削除
$ rails generate scaffold hoge
$ rails db:migrate
$ rails db:rollback
$ rails destroy scaffold hoge
対応策3:先に削除したときはデータベースをリセット
$ rails generate scaffold hoge
$ rails db:migrate
$ rails destroy scaffold hoge
$ rails db:migrate:reset
この場合はデータベースにデータがあったときは消える
2.2.1まで終了
5/11 8:20
5/11 20:00 開始
*MVC(Model-View-Controller)の挙動確認
*Micropostsリソースをscaffoldでコードを生成
usersと同様の手順
2.3.1まで終了
5/11 20:45 終了
5/12 8:15 開始
・Toyアプリケーションのmodelについて
model内で、バリデーション(validation)を使って簡単に制限を加えることができる。
app/models/micropost.rb
↓マイクロポストの最大文字数を140文字に制限する。
validates :content, length: { maximum: 140 }
*データモデル同士の関連付けをmodel内に表現できる。
1人のUserは、複数のMicropostをもつ
→has_many :microposts
Micropostは、1人のUserに属する
→belongs_to :user
演習
1.ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。
2.以下を追記した結果、マイクロポストが空でないことを検証できているかどうか、実際に試す。
presence: true
3.以下を追記し、Userモデルのnameとemailが存在していることを検証
validates :name, presence: true
validates :email, presence: true
*継承
生成したmodel,controllerはそれぞれ↓のように継承されている。
User < ApplicationRecord < ActiveRecord::Base
UsersController < ApplicationController < ActionController::Base
これにより
モデルオブジェクトは、データベースにアクセス
コントローラは、モデルオブジェクトの操作や、送られてくるHTTP requestのフィルタリング
などの機能が実行できる。
・Toyアプリケーションをデプロイ
↓に設定ファイルを作成し、ビルドコマンドを記述。
bin/render-build.sh
Renderでデプロイする際、Build Commandに↓を指定する。
./bin/render-build.sh
第2章終了
5/12 9:15 終了