Ruby on Railsフレームワークの設計構造をMVCマインドで理解する
railsでは、リクエスト(/users)を送信するまでの全工程は以下のようになります。
1) ブラウザがリクエスト(/users)を送信する
2), Rails routesはusers_controllerのindexメソッドにリクエストをルーティングします。
3), users_controller は User Model にコールバックし、すべてのユーザーを取得します。
4), User Model はデータベースからすべてのユーザーを読み出します。
5) User Model はデータベースから読み込んだすべてのユーザーを List にラップし、user_controller に返します。
6), user_controlle は User Model から返されたユーザーリストをインスタンス変数 @users に代入し、それをインデックスビューに渡します。
7), インデックスビューは渡された@usersを受け取り、埋め込まれたrubyを通してHTMLとしてレンダリングします。
8), user_controller はレンダリングされたページをブラウザに返します。
ルーティング戦略、つまり別のコントローラやコントローラの別のメソッドを呼び出すこと以外は、リクエスト間で基本的に同じ処理が行われます。正確な呼び出し戦略はRailsルータが決定します。
Railsルーター
RailsのResourcesのルーティングポリシーは、URLはリソースの位置特定を担当するだけで、リソースの操作はネイティブのHTTPメソッドタイプで決定するというRESTデザインスタイルに準拠しており、routes.rbでresources :usersを設定するだけで、以下のように一連のルーティングポリシーが得られるようになっています。
HTTP request URI Action Purpose
GET /users index page to list all users
GET /users/1 show page to show user with id 1
GET /users/new new page to make a new user
POST /users create create a new user
GET /users/1/edit edit page to edit user with id 1
PUT /users/1 update update user with id 1
DELETE /users/1 destroy delete user with id 1
もちろん、RailsはさまざまなRESTスタイルのルートに加えて、routes.rbに以下の記述を追加することでさまざまなカスタムルートルールもサポートしています。
match 'user/create' => 'users#new', :via => :get
このルールはブラウザのbrowse/user/createにマッチし、Railsはusers_controllerのnewメソッドにリクエストをルーティングし、それ以外は/users/newと同じように処理します。ただし、Railsは最初にマッチしたルールを使用するので、上のルートステートメントを次のように変更すると、そのルールが使用されることになります。
match 'users/create' => 'users#new', :via => :get
もし、ルールにマッチさせたいのであれば、私たちが考えているようにはいきません、ルールにマッチします
GET /users/1 show page to show user with id 1
つまり、idが作成されたユーザーを取得します。
関連
-
Ruby on rails install to remove DL is deprecated, please use Fiddle warning message method [test available].
-
挿入ソートアルゴリズムのRuby実装と高度な双方向挿入ソートコード例
-
GitHubが提唱するRubyコードの書き方まとめ
-
Rubyでタスクビルダーのrakeを使い始める
-
Ruby on RailsでPing ++プラットフォームでの決済を実現
-
Rubyにおける数値型と定数の例
-
Ruby on Railsにおける国際化の簡単な紹介
-
Ruby on Railsのビューの書き方に関するいくつかのアドバイス
-
Rubyのバージョンを管理するためのrbenvの使い方
-
Rubyにおけるrequireの使用例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Rubyのオブジェクト指向プログラミングにおけるスコープの簡単な説明
-
Jekyll静的ウェブサイトのバックエンドエンジンのチュートリアル
-
RubyのXMLデータパースライブラリ「Nokogiri」の高度な使い方
-
デザインパターンにおけるDecoratorパターンを用いたRubyの例
-
Builderビルダーパターンを用いたRubyデザインパターンプログラミング例
-
Rubyのデザインパターン。プログラミングにおけるシングルトンパターンの活用
-
Rubyのプライベートとプロテクトを簡単にご紹介します。
-
Ruby on Railsのパフォーマンスを最適化するためのいくつかの方法についての考察
-
Ruby on Railsのインストールに関する簡潔で迅速なガイド
-
Rubyの基本構文