【rails】railsの基礎 処理の流れについて
前回scaffoldでサクッとtask管理アプリを作成したので、これに機能追加しつつrailsの勉強を進めていきたいと思います。
ちなみに前回の記事は以下。
では1番最初にrails処理の基本的な考え方、MVCモデルについて解説します。
MVCモデルについて
railsはMVCモデルで動作しているわけですが、「Model」「View」「Controller」の頭文字をとってMVCとなります。
それぞれは以下の役割を持っています。
今回作成したtask管理アプリのtask一覧表示機能を例にすると
M (Model) → DBにアクセスしてtask情報を取得
V (View) → taskを画面に表示
C (Controller) → モデルを使ってtask情報を取得して、Viewに渡す
みたいな感じ。
ここにルーティングの概念も入れて具体的なコードをみながら処理の流れを説明します。
先に流れを書くと
- URLにhttp://localhost:3000を打ち込んでアクセス
- route.rbで指定されたルーティングによってtasksコントローラのindexメソッドが動く
- Taskモデルを使って、DBに保存されている全task情報を取得する
- 全task情報をViewに渡して画面に表示させる
1.URLにhttp://localhost:3000を打ち込んでアクセス
ローカル環境でrailsの開発を行う時は、localhost:3000でアクセスすることでこの後解説するroute.rbに定義された処理が実行できます。
2.route.rbで指定されたルーティングによってtasksコントローラのindexメソッドが動く
scaffoldで新しいrailsアプリを作成した時にroute.rbに記述した「root to: tasks#index」がルーティングを指定しています。
Rails.application.routes.draw do resources :tasks # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root to: "tasks#index" end
意味としては
「rootにアクセスしてきた時にtasksコントローラのindexメソッドを動かしなさい」
になります。
この他にも例えば、「http://localhost:3000/tasks/1/editにアクセスした時はtasksコントローラのeditメソッドを動かしなさい」のように様々なルーティングが設定できます。
3.Taskモデルを使って、DBに保存されている全task情報を取得する
次にtasksコントローラのindexメソッドをみていると以下のような記述があります。
def index @tasks = Task.all end
Taskモデルを使って、taskの全ての情報を取得して@tasksという変数に格納しています。Taskモデルを使うことで複雑なSQLを記述しなくても簡単に情報をゲットできるわけです。
4.全タスク情報をViewに渡して画面表示させる
最後に@tasksに格納された情報をViewに表示させている部分です。
<tbody> <% @tasks.each do |task| %> <tr> <td><%= task.content %></td> <td><%= link_to 'Show', task %></td> <td><%= link_to 'Edit', edit_task_path(task) %></td> <td><%= link_to 'Destroy', task, method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> </tbody>
細かい処理の説明はしませんが、each do 〜 endの部分が繰り返し処理で全てのtask情報を表示させている部分です。
taskが3つあれば、3回繰り返す事になります。
link_toの部分は選んだtaskの編集したり、削除したりするためのリンクです。クリックすることで、ルーティング→コントローラ(モデル活用)→ビューという流れが動くわけです。
大体の流れはこんな感じ。この基本がわかっていると、あとは個々の処理のお作法を覚えれば、基本的なwebサイトは作れるんじゃないでしょうか。