Ruby on Rails チュートリアルの第2章のメモです。第2章ではscaffoldというコード自動生成機能を駆使して、高速で機能を開発しつつ、RESTアーキテクチャを学ぶことができます!
第2章 Toyアプリケーション | Rails チュートリアル
データモデルの設計
Webアプリケーションを作る際、構造を表すためのデータモデルを最初に設計しておくのが慣例
リソースの作成
データモデルとそのモデルを表示するためのWebインターフェースを組み合わせたものをリソースと呼ぶ
Railsではscaffoldジェネレータという機能を使うことで、リソースのコードを自動生成できる
scaffoldを利用したUsersリソースの自動生成
rails generate scaffold
コマンドを叩くことで、リソースを自動生成できる
rails generate scaffold User name:string email:string
scaffoldジェネレータで生成できるのは、リソースのコードのみ
モデルとデータベースと連携させるため、
作成したリソースをRakeを利用してマイグレート(migrate)する
bundle exec rake db:migrate
これで、リソース(RESTアーキテクチャ)の自動生成とデータベースへの自動構築が完了する
Rakeとは?
Unixでは、C言語などのプログラムをビルドするためにmakeというツールが利用されてきた
RakeはRuby版のmake
コマンド
RailsにおけるMVCの挙動
- ブラウザから「/users」というURLのリクエストをRailsサーバに送信
- 「/users」リクエストは、RailsのルーターによってUsersコントローラ内のindexアクションに割り当てられる
- indexアクションが実行され、そこからUserモデルに、「全てのユーザを取り出せ」(User.all)と問い合わせる
- Userモデルは問い合わせを受け、すべてのユーザーをデータベースから取り出す
- データベースから取り出したユーザの一覧をUserモデルからコントローラに返す
- Usersコントローラ、ユーザの一覧を@users変数(@はRubyのインスタンス変数を表す)に保存し、indexビューに渡す
- indexビューが起動し、ERB(Embedded RuBy: ビューのHTMLに埋め込まれているRubyコード)を実行してHTMLを生成(レンダリング)する
- コントローラは、ビューで生成されたHTMLを受け取り、ブラウザに返す
RailsにおけるRESTアーキテクチャ
REpresentational State Transfer(REST)
インターネットそのものやWebアプリケーションなどの、分散/ネットワーク化されたシステムやアプリケーションを構築するためのアーキテクチャのスタイルの1つ
RailsにおけるRESTとは、
アプリケーションを構成するコンポーネントを「リソース」としてモデル化する
ことを指す
リソースは、
RDBの作成/読み取り/更新/削除(Create/Read/Update/Delete:CRUD)操作
と
4つの基本的なHTTPrequestメソッド(POST/GET/PATCH/DELETE)
の両方に対応している
Railsにおけるインスタンス変数
@記号で始まる変数はRubyではインスタンス変数と呼ばれる
Railsのビューでは自動的にこれらのインスタンス変数を使用できる
CakePHPでは、
$this->set(compact($users));
みたいに書いていたのがなくなって楽そう!
scaffoldジェネレータによって自動生成されたリソースの欠点
- データのバリデーション(検証)が行われていない
- ユーザ認証が行われていない
- テストが書かれていない
- レイアウトやスタイルが整っていない
- 理解が困難
Railsにおける検証(バリデーション)
バリデーションはmodel(app/models/micropost.rb
)で行う
class Micropost ActiveRecord::Base
validates :content, length: { maximum: 140 }
end
RailsにおけるRelationals関連付け
異なるデータモデル同士の関連付けをすることで、より簡単にデータアクセスすることができるようになる
モデルでhas_manyとかbelongs_toを書いていく
CakePHPとほぼおなじ
class User ActiveRecord::Base
has_many :microposts
end
class Micropost ActiveRecord::Base
belongs_to :user
validates :content, length: { maximum: 140 }
end
RailsのConsole
ターミナルでrails console
コマンドを入力すると立ち上がる
RailsのコマンドをCUIで叩くことができる
exit
コマンドかCtrl-d
で終了できる
Railsの継承の階層
CakePHPと同じ構造
Railsのモデルの継承構造
RailsのモデルはActiveRecode::Base
というクラスを継承している
継承することで、作成したモデルオブジェクトがデータベースにアクセスできるようになる
RailsのControllerの継承構造
Railsのコントローラの継承構造は2段階になっている
まず各コントローラはApplicationController
を継承している
そして、ApplicationController`は
ActionController::Baseを継承している
ApplicationController`を継承しているので、共通処理などはApplicationコントローラに記載する
Railsのコントローラは必ず
Ruby on Rails チュートリアル 「第2章 Toyアプリケーション」まとめ
- Scaffold機能でコードを自動生成すると、Webのあらゆる部分からモデルデータにアクセスしてやりとりできるようになる
- Scaffoldは何より手っ取り早やいのがとりえだけど、理解には向いていない
- RailsではMVCモデルが採用されている
- Railsが解釈するRESTには、標準的なURLセットと、データモデルとやりとりをするてためのコントローラアクションが含まれている
- Railsにはバリデーションがサポートされている
- データモデルの関連付けのための組み込み関数が多数ある
- コンソールを使える
かかった時間は1時間ほど
CakePHPはRailsがベースとなっているだけあり、似ているところが多い
Ruby on Rails チュートリアル 第2章までかかった合計時間は3時間
次回記事は、こちら!
Ruby on Rails チュートリアル「第3章 ほぼ静的なページの作成」をやってみた
Ruby on Railsのおすすめ書籍はこちら!