Rails Tutorialまとめ

· · ()

Ruby on Rails チュートリアルのノート

  • 2017.05.07時点では第4版
  • Rails5ベース
  • 食い扶持確保のための大事な自習ログ

第一章

MVCアーキテクチャ

  • ブラウザはリクエストをWebサーバに送信
  • リクエストを処理するのがController
  • ControllerはViewを生成して,HTMLをブラウザに返す
  • 動的なWebページの場合,ControllerはModel(データベースとの通信を担当するRubyオブジェクト)

Herokuへのデプロイ

  • HerokuはPostgreSQLを使用
  • Gemfileに本番環境用の記述
group :production do
  gem 'pg', '0.18.4'
end
  • :productionが本番用という意味
  • 次に開発用の設定
group :development, :test do
  gem 'sqlite3', '1.3.11'
  gem 'byebug',  '9.0.0', platform: :mri
end
  • :developmentが開発用という意味
  • bundle installの際にフラグを入れることで,開発用と本番用を分岐できる
    • bundle install --without production
    • これで本番用のgemは開発環境に入らない

第二章

  • ユーザーと短いマイクロポスト (Twitterにおけるツイート) のみをサポートするマイクロブログを作成

ユーザのモデル設計

  • 「ユーザ」を表現するデータモデルを設計
  • データモデルusersは,データベースのテーブルに対応
  • 属性idnameemailはそれぞれテーブルのカラムに対応
  • idは一意

マイクロソフトのモデル設計

  • 属性user_id:マイクロポストとユーザの結びつけ
  • 1人のユーザに複数のマイクロソフトが関連付く

Userリソース

  • scaffoldの使い方
  • $ rails generate scaffold リソース名の単数形 属性1:型, 属性2:型, ...
    • $ rails generate scaffold User name:string email:string
  • データベースの更新
    • $ rails db:migrate
  • http://localhost/usersusers_controllerindexアクションを呼び出せる
    • users/showusers/newなどでそれぞれ違うアクションが呼び出せる
  • 演習:「User was successfully created.」の箇所
    • <p id='notice'></p>の中
    • リロードすると空になる

MVCの挙動

  • RailsルートでUserリソースを使用する場合は,config/routes.rbresources :usersを書き込む必要がある
  • rootの先をusersコントローラのindexアクションにする
    • root 'users#index'
  • REST : REpresentational State Transfer
    • ネットワークや分散システムにおけるソフトウェアアーキテクチャの1つ
    • RailsのRESTはアプリケーションを構成するコンポーネント (ユーザーやマイクロポストなど) を「リソース」としてモデル化すること
    • リレーショナルデータベースの作成/取得/更新/削除 (Create/Read/Update/Delete: CRUD) 操作
    • HTTP requestメソッド (POST/GET/PATCH/DELETE)
  • インスタンス変数:@つき変数
  • Railsのコントローラ内で宣言したインスタンス変数はビューでも使える
    • app名/views/users/index.html.erbを見ると確かに使ってる

バリデーションの設定

  • 今のMicropostリソースは文字数制限がない
  • 文字数制限を入れる
  • モデル(micropost.rb)に次を記述
    • validates :content, length: { maximum: 140 }

異なるデータモデル同士の関連付け

  • 1ユーザに複数のマイクロポストが対応
    • has_many :micropostsUsermodel
  • 1つのマイクロポストは1人のユーザーが対応
    • belongs_to :userMicropostmodel
  • rails consoleが動かなかったので,develop環境のgemにgem 'rb-readline'を足す
  • 演習
    • Micropostのコンテンツが入っているかどうかのバリデーション
    • presence: trueを足す
    • Userモデルのバリデーション
    • validates :name, presence: truevalidates :email, presence: trueを足す

継承の階層

  • <は継承関係を示す
  • modelはApplicationRecordクラスを継承
  • ApplicationRecordクラスはActiveRecord::Baseクラスを継承
  • ActiveRecord::Baseはデータベースアクセス関連の基本クラス
  • 他のモデルのコントローラはApplicationControllerの継承
  • ApplicationControllerは基本クラスであるActionController::Baseを継承

第三章

TODO : 次回ここから