迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

【rails】railsの基礎 処理の流れについて

前回scaffoldでサクッとtask管理アプリを作成したので、これに機能追加しつつrailsの勉強を進めていきたいと思います。

 

ちなみに前回の記事は以下。

oyaoya1123.hatenablog.com

 

では1番最初にrails処理の基本的な考え方、MVCモデルについて解説します。

 

MVCモデルについて

 

railsMVCモデルで動作しているわけですが、「Model」「View」「Controller」の頭文字をとってMVCとなります。

 

それぞれは以下の役割を持っています。

 

今回作成したtask管理アプリのtask一覧表示機能を例にすると

 

M (Model)  → DBにアクセスしてtask情報を取得

V (View)   → taskを画面に表示

C (Controller) → モデルを使ってtask情報を取得して、Viewに渡す

 

みたいな感じ。

 

ここにルーティングの概念も入れて具体的なコードをみながら処理の流れを説明します。

 

先に流れを書くと

  1. URLにhttp://localhost:3000を打ち込んでアクセス
  2. route.rbで指定されたルーティングによってtasksコントローラのindexメソッドが動く
  3. Taskモデルを使って、DBに保存されている全task情報を取得する
  4. 全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の編集したり、削除したりするためのリンクです。クリックすることで、ルーティング→コントローラ(モデル活用)→ビューという流れが動くわけです。

 

f:id:oyaoya1123:20190917002921p:plain

 

大体の流れはこんな感じ。この基本がわかっていると、あとは個々の処理のお作法を覚えれば、基本的なwebサイトは作れるんじゃないでしょうか。