- ルーターの役割はクライアントからの要求をアクションに割り付けること
- コントローラーは割り付けられた要求の実行を制御する
- モデルはコントローラーの指示を受けてデータベースとのやり取りを行う
ルーティング
- ルーターが行うアクションへの振り分け作業
- config/routes.rb で行う
HTTPメソッド
- WEBアプリはURIによって、要求の宛先を指示し、HTTPメソッドによって要求目的を支持する
- GET
- POST
- PUT
- PATCH
- DELETE
ルートの対応関係
GET /users users#index
- 先頭のGETはHTTPメソッド
- 次の/usersはURI
- http://ドメイン:ポート番号/usersに対応する
- users#index はUsersControllerのindexアクション
リソースフルルート
- モデルを介したリソースに対するデータの追加、更新、削除、取得、一覧表示のお決まりの操作をリソースフルルートとしてひとまとめに表現できる
- new
- create
- edit
- update
- show
- 紹介処理
- 詳細画面表示
- 特定のデータを呼び出し表示する
- 一覧紹介
- 一覧画面表示
- 複数のデータを呼び出し、一覧で表示する
- destroy
ルート設定とルーティングヘルパー
実装ルートの確認
- rails routes
- ブラウザからでも確認できる
アプリケーションルートの設定方法
root to: 'コントローラー名#アクション'
root to: redirect('users/index')
- アプリケーションルートの表示優先度
- public/index.html が存在する場合これを表示
- routes.rb にルートが設定されている場合ルートに従ったページを表示
- 設定していない場合はRailsデフォルトページ
非リソースフルルートの設定方法
HTTPメソッド `URIパターン`, to:'コントローラー#アクション'
ルーティングヘルパー
- Railsのルートを設定すると、宛先URLを1語で表現するPathヘルパーが実装される
- rails routesで表示した時、左に表示されるprefix欄の名前に_pathをつけることでPathヘルパーとして使用できる
- URLヘルパーは_urlをつける
- Prefixが表示されていないルートは上位のルートと等しい
リソースフルルートのオプション
- as
- controller
- path
- path_names
- デフォルトのnew, editなどの標準パス構成を変更したいときに使う
- only
- 7つのアクションルートのうち指定したもののみのルートを生成する
- except
- format
- true
- false
- 指定なし
- 指示しない場合htmlとみなされる
- constraints
- パラメーターの内容を制限する場合に使用する
- ex: パラメータのidを1-9に制限する
resources :users, constraints: {id: /[1-9]/}
- collection
- コレクションルート設定に使用
- id を特定できないリソースを対象としたルート
- リソースフルルートでは index, new, create が該当
- member
- メンバールートの設定に使用
- idを特定できる単一リソースを対象としたルート
- edit, update, show, destroy が該当
- shallow
- 親子関係を持つ入れ子ルートに対して直接子のidだけでアクセスできるように表現を変更する
- show, edit, update, destroy に対して
- shallow_path
- 指定されたパス名を入れ子の shallowルートのURL前に付加
- shallow_prefix
- 指定されたプレフィックス名を入れ子のshallowルーティングヘルパーの接頭辞に付加
- 1階層化されたshallowルートに会えて接頭辞を挿入できる
リソースフルルートのグループ化
namespace :admin do
resources :users
end
- この場合クラスは本来のUsersControllerではなくAdmin::UsersControllerとなる
- ファイルの保管場所もapp/controllersではなくapp/controllers/adminに保管される
- scopeメソッドを使用したグループ化
scope :admin
resources :users
end
- namespace とは異なり標準のapp/controllerディレクトリ直下のusers_controller.rbを見に行く
resources :users, path: '/admin/users'
と同様の結果になる
- moduleオプションを使うと呼び出すコントローラーをnamespace指定の場合と同じディレクトリ構成にできる
- namespace と一致したルートの指定
scope :admin, as: :admin, module: :admin do
resources :users
end
ルートの共通化
concern :searchable do
get 'search', on: :collection
end
resources :users, concerns: :searchable
resources :books, concerns: :searchable
コントローラーの役割
コントローラーとREST
コントローラーの仕組み
- クライアントからのHTTPリクエストに基づいてルーターで処理が振り分けられ、対応するコントローラのアクションが呼び出される
- これはルーターによって呼び出されたコントローラーがインスタンス化され、インスタンスメソッドが実行されている
- HTTPリクエストを受けHTTPレスポンスを送信して処理を終了する
- 最後にはレンダリング処理をして終了する
- アクションの中で実行した全ての一時的な資源はなくなる
- 基本的なRailsアプリケーションの流れはHTTPリクエストに対して1つのアクションが実行され、HTTPレスポンスが送信される
HTTPヘッダー情報などの取得方法
- requestメソッドでリクエストオブジェクトとしてリクエスト情報を取得できる
- リクエストオブジェクトのheadersメソッドでヘッダーオブジェクトとしてヘッダー情報を取得できる
- host
- format
- method
- headers
- port
- protocol
- query_string
- remote_ip
- url
- ネットワーク上ではPATCHやDELETEであってもHTTPメソッドのGETやPOSTのみしか使用されていない
- 他のメソッドは疑似的に受け取っているように見せている
- responseメソッドでレスポンス情報をレスポンスオブジェクトとして返すことができる
- body
- クライアントに送り返されるデータの内容を取得(HTMLの内容など
- status
- location
- content_type
- charset
- headers