Ruby
Rails
初心者
Railsチュートリアル

基本用語

REST

アプリケーションを構成するコンポーネント (ユーザーやマイクロポストなど) を「リソース」としてモデル化すること。

インスタンス変数

@記号で始まる変数のこと。(@usersなど)

文法

rails generate scaffold

scaffoldでUserリソースの作成をする。

rails generate scaffold User name:string email:string

resources

ユーザーからリクエストされたURLを、Usersリソースで使うコントローラのアクションに割り当てる。

config/routes.rb
Rails.application.routes.draw do
  resources :users # ユーザーからリクエストされたURLを、Usersリソースで使うコントローラのアクションに割り当てる
  root 'application#hello' 
end

validates

文字数を制限する。

app/models/micropost.rb
class Micropost < ApplicationRecord
  validates :content, length: { maximum: 140 } # 140文字の文字数制限
end

presence: true

マイクロポストのコンテンツが存在しているかどうかを検証する。

app/models/micropost.rb
class Micropost < ApplicationRecord
  belongs_to :user
  validates :content, length: { maximum: 140 },
                      presence: true # マイクロポストのコンテンツが存在しているかどうか
end

MVC (Model-View-Controller)

「/users にあるindexページをブラウザで開く」という操作をしたときのMVCの挙動

mvc_detailed.png

  1. ブラウザから「/users」というURLのリクエストをRailsサーバーに送信する。
  2. 「/users」リクエストは、Railsのルーティング機構 (ルーター) によってUsersコントローラ内のindexアクションに割り当てられる。
  3. indexアクションが実行され、そこからUserモデルに、「すべてのユーザーを取り出せ」(User.all)と問い合わせる。
  4. Userモデルは問い合わせを受け、すべてのユーザーをデータベースから取り出す。
  5. データベースから取り出したユーザーの一覧をUserモデルからコントローラに返す。
  6. Usersコントローラは、ユーザーの一覧を@users変数 (@はRubyのインスタンス変数を表す) に保存し、indexビューに渡す。
  7. indexビューが起動し、ERB (Embedded RuBy: ビューのHTMLに埋め込まれているRubyコード) を実行して HTMLを生成 (レンダリング) する。
  8. コントローラは、ビューで生成されたHTMLを受け取り、ブラウザに返す。

RESTアーキテクチャ

RailsにおけるRESTアーキテクチャを構成するすべてのアクションの一覧

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のユーザーを削除するアクション

Usersリソースが提供するRESTfulなルート

関連付け

1人のユーザーに複数のマイクロポストがある

app/models/user.rb
class User < ApplicationRecord
  has_many :microposts
end
1つのマイクロポストは1人のユーザーにのみ属する
app/models/micropost.rb
class Micropost < ApplicationRecord
  belongs_to :user
  validates :content, length: { maximum: 140 }
end

micropost_user_association.png

マイクロポストとユーザーの関連付け