【Rails】 RouterとMVC
※この記事は有料設定ですが、無料で全て読めます。
役に立ったら投げ銭してください。
Railsチュートリアル完走後の時の私が、「こんなことを教えてくれたらな」とか「こんなことを知りたかった」と思った内容を書きました。
web通信はHTTPリクエストとHTTPレスポンスのやりとりで実現されています。
サーバーはHTTPリクエストを受け取り(①)、それに応じたHTTPレスポンスを返す(②)わけですが、Railsに限らずwebサーバーは①と②の間の処理と言えるでしょう。
そして受け取ったリクエストによって、どんな処理をするか決定づける仕組みがRouter(routes)とMVCと言えます。
簡単に説明していきたいと思います。
◇概要
Router
Routerは受け取ったHTTPリクエストのURLとHTTPメソッド(GetとかPostとかext...)の組み合わせによりControllerのどのアクションを発動させるかを決定します。
どのアクションを起こすかというルール決めはroutes.rbファイルに記述します(参照)。
MVC
Railsではお馴染み(?)のMVCですが、今回はそれぞれの責務について細かくは説明しません。ざっと説明すると、
Model:データを司ります
Controller:ModelとViewの司令塔です。色んなアクションがあります。
View:ブラウザに何が映るかというフロント側を司ります
◇やりとりの流れ
HTTPリクエストを受け取ってからのシーケンス(順序)は以下の流れです。
①ServerがHTTPリクエウトを受け取りRouterに引き渡す
②RouteがURLとHTTPメソッドの組み合わせで送り先Controllerとアクションを判定する
③アクションがModelにデータを取得する指令を出す
④Modelが指令をSQLに翻訳してDBにアクセスする
⑤DBがSQLの指令を実行してModelに結果を返す
⑥Modelの結果をインスタンス変数に格納する
⑦インスタンス変数に格納されたデータを該当するViewに引き渡す
⑧Viewがブラウザに表示する元となるerbファイルからHTMLを生成し、HTTPレスポンスをクライアントに返す
◇具体的に見る
progateやrailsチュートリアルでこんな教え方してたなというのを思い出しつつ、それにそって説明します。
分かりやすいのでusers showを見ることとします。
①ユーザーの個人情報を見たいのでリンクをクリックし、
url: xxxxxxxxxxxx/users/30 へジャンプ。
②RouterはurlとHTTPメソッドより、users コントローラーのshow アクションを判定。
③④⑤⑥
showアクション内で
def show
@user = User.find(params[:id])
end
と定義されているはず。このUserがつまりuser.rbのclass Userを表しているのですが、要するにUserモデルです。
Userモデルに 「idが30番のヤツ探してこいや!」と指示しています。この指示にしたがって裏でDBとやりとりをして受けとったデータを@userに格納しています。この@userがインスタンス変数です。
⑦⑧
@userに格納されたデータは viewフォルダのuserフォルダのshow.html.erb 内で展開されます。
<%= @user.name %>
<%= @user.email %>
<%= @user.age %>
みたいなのが記述されていれば、それぞれ「名前、メールアドレス、年齢」が表示されます。
◇まとめ
Railsは原則的にこのシーケンスから外れることはありません。
リンクを踏むにしろ、フォームに記載した情報を送信するにしろ、退会ボタンを押すにしろ、必ず
URLとメソッドよりControllerとアクションを判断 → モデルを通じてDBとやりとり → 受け取ったデータをインスタンス変数に格納し、Viewで展開
というやりとりをします。
=======================================================
◇この記事が役に立ったら
記事の内容としてはこれでおしまいですが、もしもこの記事が役に立たら、ページ下の「気に入ったらサポート」ボタンから投げ銭して頂けると幸いです!
noteの会員でない方でも、下の「記事を購入する」ボタンからこの記事を100円で購入することが可能です!
あなたの投げ銭がモチベーションに繋がるので、よろしくお願いします!
ここから先は
¥ 100
この記事が気に入ったらサポートをしてみませんか?