resoucesとは
Railsで定義されている7つのアクションのルーティングを自動で作成するメソッドです。
resoucesを使うことで簡単にルーティングを作成できる.
routes.rb
Rails.application.routes.draw do
resources :コントローラー名
end
・Railsで定義されている7つのアクション
アクション名 | 役割 |
---|---|
index | リソースの一覧を表示させる |
show | リソースの詳細を表示させる |
new | 投稿フォームを表示させる |
create | リソースを追加させる |
edit | 更新フォームを表示させる |
update | リソースを更新させる |
destroy | リソースを削除する |
例えばusers
なら
routes.rb
Rails.application.routes.draw do
resources :users
root 'users#index'
end
usersリソースに対する以下のような7つの標準的なアクションに対するルーティングが生成されます。
idは今回は1ということにします。
HTTPリクエストメソッド | URL | アクション | 用途 |
---|---|---|---|
GET | /users | index | すべてのユーザーを一覧するページ |
GET | /users/1 | show | id=1のユーザーを表示するページ |
GET | /users/new | new | 新規ユーザーを作成するページ |
POST | /users | create | ユーザーを作成するアクション |
GET | /users/1/edit | edit | id=1のユーザーを編集するページ |
PATCH | /users/1 | update | id=1のユーザーを更新するアクション |
DELETE | /users/1 | destroy | id=1のユーザーを削除するアクション |
引用 https://railstutorial.jp/chapters/toy_app?version=7.0#table-demo_RESTful_users
複数のコントローラーなら
複数のコントローラーのルーティングを下のように一行で定義することができます。
routes.rb
Rails.application.routes.draw do
resources :コントローラー名, :コントローラー名
end
# (例)officesコントローラーとusersコントローラーの7つのアクションのルーティングが作られる
resources :offices, :users
現場ではonlyもよく使われる
resourcesでonlyオプションを使用すると、生成されるルートが特定のアクションに制限されます。only
は、不要なルートを生成せずに、特定のアクションだけを含むルートを生成する時に使います。
resources :users, only: [:index, :show]
みたいな感じです。具体的なコードで見ていきます。コードはChatGPT参照。
resourcesメソッドを使用したルーティングの具体例で、
この例では、articlesというリソースに対するRESTfulなルーティングを考えです。
routes.rb
Rails.application.routes.draw do
# "articles" リソースに対する全てのRESTfulなルートを生成
resources :articles
# "comments" リソースに対する特定のルートだけを生成
resources :comments, only: [:index, :show, :new, :create]
# "authors" リソースに対するルートを "destroy" を除いて生成
resources :authors, except: [:destroy]
# "reviews" リソースに対するカスタムな名前のルートを生成
resources :reviews, path: 'opinions', controller: 'feedback'
# "posts" と "comments" のネストされたルートを生成
resources :posts do
resources :comments
end
# "profiles" リソースに対するルートをカスタムコントローラーで生成
resources :profiles, controller: 'users_profiles'
# "tags" リソースに対する特定のフォーマットの制約を追加
resources :tags, format: true
# その他のカスタムなルート
get 'dashboard', to: 'dashboard#index'
end