LoginSignup
0
0

More than 3 years have passed since last update.

Railsのルーティングの記述方法

Posted at

概要

Railsでルーティングを設定する際、私が勉強したことを復習の意味も込めてまとめてみます。

ルーティングとは

Railsにおけるルーティングとは、リクエストされたURLからコントローラとアクションを選択することです。

ルーティングの設定方法

config/routes.rbファイル内にて設定を記述し、その内容がルーティングの設定となります。

config/routes.rb
Rails.application.routes.draw do
  #ここにルーティングを記載
end

ルーティングの記述方法

基本は「メソッド "パス" => "コントローラ#アクション"」にて記載する。

config/routes.rb
Rails.application.routes.draw do
  #例
  get "about" => "top#about"
  post "login" => "sessions#login
end

コントローラ#アクションがパスと同じ場合、省略が可能である

config/routes.rb
Rails.application.routes.draw do
  #例
  get "info/room"
end

asオプションを付ければルーティングに名前を付けることができる。"指定した名前_path"をメソッドとして呼び出すと"/指定した名前"で文字列を返す。

config/routes.rb
Rails.application.routes.draw do
  #例
  get "help" => "document#help", as: "help"
end

":パラメータ"と記載すると、パラメータをパスとして使用することができる。

config/routes.rb
Rails.application.routes.draw do
  #例
  get "posts/:year/:month" => "posts#show
end

リソースベースのルーティングの記述方法

リソースベースでルーティングを設定するにはresourcesメソッドを記載し、リソース名を複数形にします。
また、単数リソースでルーティングを設定するにはresouceメソッドを記載し、リソース名を単数形にします。
Railsのリソースベースとは、RESTに基づきコントローラで扱う対象に名前をつけたものです。

config/routes.rb
Rails.application.routes.draw do
  #例
  resources :users
  # get "users" => "users#index"
  # get "users/:id" => "users#show"
  # get "users/new" => "users#new"
  # get "users/:id/edit" => "users#edit"
  # post "users" => "users#create"
  # patch "users/:id" => "users#update"
  # delete "users/:id" => "users#destroy"
  resource :account
  # get "account" => "account#show"
  # get "account/new" => "account#new"
  # get "account/edit" => "account#edit"
  # post "account" => "account#create"
  # patch "account" => "account#update"
  # delete "account" => "account#destroy"
end

resourcesメソッドで作ったルーティングに追加でアクションを追加する場合は、ブロックで囲み、その中で新たにメソッド、アクションを追加で記述します。
追加のアクションが集合を表す場合は、"on: :collection"、id属性を追加する場合は、"on: :member"を設定します。

config/routes.rb
Rails.application.routes.draw do
  #例
  resources :users do
    get "search", on: :collection
    patch "suspend", "restore", on: :member
  end
end

resourcesメソッドで作ったアクションの内、必要のないアクションはonlyオプションやexceptアクションを渡し、アクションを設定します。

config/routes.rb
Rails.application.routes.draw do
  #例
  resources :users, only: [:index, :show]
  resources :users, except: [:show]
end

パスの指定

ルーティングで設定したパスはlink_toメソッドやredirect_toメソッドにてパスで指定できます。
例:リソース名 users

アクション URL    パス   
index users users_path
show users/:id user_path(user)
new users/new new_user_path
edit users/:id/edit edit_user_path(user)
create users users_path
update users/:id user_path(user)
destroy users/:id user_path(user)
~view.html.erb
<%= link_to "一覧", users_path %>

引数にモデルオブジェクトを渡すとidパラメータを取得することができます。
また、methodオプションを使えば、HTTPメソッドを区別できます。

~view.html.erb
<%= link_to "削除", user_path(@user), method: :delete %>

パスの簡略化

簡略化したパスの指定もできます。
第2引数にモデルオブジェクトを渡すとidパラメータを持ったパスと同じパスに変更できます。

~view.html.erb
<%= link_to "削除", users_path(@user), method: :delete %>
     ↓
<%= link_to "削除", @user, method: :delete %>

個別リソースを扱うアクションは[:アクション名, モデルオブジェクト]で設定できます。

~view.html.erb
<%= link_to "編集", edit_user_path(@user) %>
     ↓
<%= link_to "編集", [edit, @user] %>

idのいらないリソースを扱うアクションは"_path"を省略し、シンボルにすると設定できます。

~view.html.erb
<%= link_to "一覧", users_path %>
     ↓
<%= link_to "一覧", :users %>

まとめ

ルーティングとパスについて改めて理解を深めました。
ルーティングやパスは簡略化した状態でプログラムを書くことが多いので、本来の形を忘れがちになってしまうので、今回復習できてよかったです。
まだまだ細かく調べるとルーティングの設定方法はあると思うので、必要に応じて追加でまとめていきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0