経緯
Railsチュートリアルを1日1章分以上終わらすことを目標にしている
今回は第2章でざっくり何やったかを自分用に残しておく
scaffoldジェネレータを使ってアプリケーションをすばやく生成
Scaffold機能でコードを自動生成すると、Webのあらゆる部分からモデルデータにアクセスしてやりとりできるようになる
RailsではWebアプリケーションの構成にMVC(Model-View-Controller)というモデルを採用している
MVCの挙動
1.ブラウザ -> Railsサーバー
2.Rails rooter -> Controller
3.Controller -> Model
4.Model <- -> DB
5.Model -> Controller
6.Controller -> View
7.View -> Controller
8.Controller -> ブラウザ
Railsが解釈するRESTには、標準的なURLセットと、
データモデルとやりとりするためのコントローラアクションが含まれている
RESTアーキテクチャ
users
| HTTPリクエスト | URL | アクション | 用途 |
|---|---|---|---|
| GET | /users | index | すべてのユーザーを一覧するページ |
| GET | /users/1 | show | id=1のユーザーを表示するページ |
| GET | /users/new | new | 新規ユーザーを作成するページ |
| POST | /users | create | ユーザーを作成するアクション |
| GET | /users/1/edit | edit | id=1のユーザーを編集するページ |
| PATCH | /users/1 | update | id=1のユーザーを更新するアクション |
| DELETE | /users/1 | destroy | id=1のユーザーを削除するアクション |
microposts
| HTTPリクエスト | URL | アクション | 用途 |
|---|---|---|---|
| GET | /microposts | index | すべてのマイクロポストを表示するページ |
| GET | /microposts/1 | show | id=1のマイクロポストを表示するページ |
| GET | /microposts/new | new | マイクロポストを新規作成するページ |
| POST | /microposts | create | マイクロポストを新規作成するアクション |
| GET | /microposts/1/edit | edit | id=1のマイクロポストを編集するページ |
| PATCH | /microposts/1 | update | id=1のマイクロポストを更新するアクション |
| DELETE | /microposts/1 | destroy | id1のマイクロポストを削除する |
2つの構造を比較すると、
Usersが
Micropostsに
置き換わっていること以外は一致している。
Userリソースの問題点
- データの検証が行われていない。ユーザー名が空欄であったり、でたらめなメールアドレスを入力したりしても通ってしまう。
- ユーザー認証が行われていない。 ログイン、ログアウトが行われていない為、誰でも無制限に操作できてしまう。
- scaffoldのテストコードはデータ検証やユーザー認証、その他の必要な要求を満たしていない。
- レイアウトやスタイルが整っていない。 サイトデザインも操作法も一貫していません。
- scaffoldのコードの理解が困難
Railsではデータのバリデーション(validation)がサポートされており、データモデルの属性の値に制限をかけることができる
app/models/micropost.rb
# MicropostクラスがApplicationRecordクラスを継承しているが、
# 大元になる基本クラスはActionController::Base
class Micropost < ApplicationRecord
#1つのマイクロポストは1人のユーザーにのみ属する。
belongs_to :user
# 140文字制限を加えたい場合、lengthを使う。
validates :content, length: { maximum: 140 }
# マイクロポストのコンテンツが存在するか確認(herokuデプロイ時にエラー回避の為削除)
presence: true
end
1人のユーザーに複数のマイクロポストがある。
app/models/user.rb
class User < ApplicationRecord
has_many :microposts
end
Railsコンソールを使うと、コマンドラインからRailsアプリケーションとやりとりすることができる
# コンソール起動
$ rails console
first_userにUserデータベースの一番最初に登録されているデータを代入
>> first_user = User.first
first_userに全てのMicropostを結びつける
>> first_user.microposts
micropost変数にfirst_userの最初のmicropostを代入。
>> micropost = first_user.microposts.first
micropostが属するユーザーを取り出す
>> micropost.user
>> exit