Hit the books!!

プログラミング学習記録

Rails ルーティング情報の見方

Railsの勉強をスタートしてまだ少ししか経ってないけど、勝手にファイルがいっぱい作成されたりする機能に面食らっているので自分のためにまとめる。

参考:パーフェクトRuby on Rails【増補改訂版】:書籍案内|技術評論社

環境:macOS Catalina / Ruby 2.7.1 / Rails 6.0.3

ルーティング情報を確認する

例:タスク(to do)管理をするアプリケーション

  • Taskモデル
  • tasksテーブル
  • カラム名:content text型

ブラウザで

http://localhost:3000/rails/info/routesにアクセスする。

f:id:ud_ike:20201006162526p:plain

コマンドで

% bin/rails routesを実行。

f:id:ud_ike:20201006162715p:plain

f:id:ud_ike:20201006162134p:plain

解説

例:POST /tasks(.:format) tasks#create

意味:HTTPのPOSTメソッドで/tasksへリクエストを送った場合、tasksコントローラのcreateメソッドが実行される

(.:format) はアクセスしたURLの拡張子(.jsonや.csvなど)によってレスポンスを変化させるために利用する。

Prefixとは?

ルーティング情報の一番左のPrefixは、例えば以下の黄色い線のnew_task GET...の場合、 f:id:ud_ike:20201006164234p:plain

一覧のページの最後の行のリンクで使われている。

app/views/tasks/index.html.erb

<p id="notice"><%= notice %></p>

<h1>Tasks</h1>

<table>
  <thead>
    <tr>
      <th>Content</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <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>
</table>

<br>

<%= link_to 'New Task', new_task_path %> # ←ここ

link_toとはaタグを生成するためのヘルパーメソッドである。第一引数はリンクの文字列になり、第二引数以降でリンク先URLなどを指定する。 この第二引数にPrefixの値を利用することでURL文字列を生成することができる。つまり、

<a href="/tasks/new">New Task</a>

というタグを生成する。

ルーティング情報の定義

ルーティングの設定はconfig/routes.rbに記述されている↓

Rails.application.routes.draw do
  resources :tasks
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

実際にtasksモデルに関するCRUD操作を定義しているのはresources :tasksの部分。

updateにはPATCHとPUTの2つがある

          PATCH  /tasks/:id(.:format)      tasks#update
          PUT    /tasks/:id(.:format)      tasks#update

もともとPUTだけだったのが、REST的にはPATCHが正しいということで途中で追加された。どちらも残しておけば良い。