Rails 一日一つメソッド (Day16) resourcesメソッド
Rails 一日一つメソッド (Day16) resourcesメソッド
resourcesメソッドとは
- railsで定義されている7つのアクションのルーチィングを自動で作成するメソッドで、簡単にルーチィングを作成することができる。
- resourcesメソッドは、ルーチィングを記述する routes.rbの中で使用する。
Rails.application.routes.draw do
resources :Controoler名
end
resourcesメソッド使い方
- railsで定義されている7つのメソッド
Action名 | 役割 |
index | リソースの一覧を表紙される |
show | リソースの詳細を表紙する |
new | 投稿フォームを表紙させる |
create | リソースを追加する |
edit | 更新フォームを表紙させる |
update | リソースを更新する |
destroy | リソースを削除する |
routes.rb
Rails.application.routes.draw do
get 'users', to: 'users#index'
get 'users/:id', to: 'users#show'
get 'users/new', to: 'users#new'
post 'users', to: 'users#create'
get 'users/:id/edit', to: 'users#edit'
patch 'users/:id', to: 'users#update'
delete 'users/:id', to: 'users#destroy'
end
RESTとは
- Representational State Transferの略で、ユーザーがあらかじめ決められたリソースを定義し、それにそってアクションとhttpメソッドを関連つける考え方。
- どのアプリでも統一された書き方でコードを書いて可読性を高める。
resourcesの使い方
- reourcesメソッドはルーチィングを記述する routes.rbの中で使用する。
Rails.application.routes.draw do
resource :Controller名
end
Rails.application.routes.draw do
resources :users
end
複数のControllerのルーチィングを一行で定義することができる。
Rails.application.routes.draw do
resources :Controller名, :Controller名
end
onlyとexcept
- resourcesメソッドを使用した時、indexアクションとshowアクションだけを指定したい時は、onlyやexceptを使う。
Rails.application.routes.draw do
resources :users, only: [:index, :show]
end
Rails.application.routes.draw do
resources :users, except: [:new, :create, :edit, :update, :destroy]
end
prefixとは?
- railsで特定のラウトに使う名前を表す。
- 名前はURLヘルパーを作成する際に使用され、これによりビューやコントローラーで該当ルートを簡単に参照できるようになる。
1) URLヘルパー生成
- Prefixを使ってアプリケーションのラウトに名前をつけると、名前を持っているURLが自動に生成される。
- 例)prefixが new_userの場合、new_user_pathと new_user_urlのようなURLヘルパーが生成される。
Rails.application.routes.draw do
get 'user', to: 'users#show'
end
<%= link_to 'View Profile', profile_path %>
このラウトに名前は userになり、user_pathまたは user_urlのようなURLヘルパーを使うことがでくる。
ネストを定義する
ルーチィングがネストするときも resourcesメソッドを使うことができる。
resources :users do
resources :questions
end
7つのアクション以外のルーチィング設計
- railsで定義された7つのアクション以外のアクションを追加する場合はルーチィングの中で memberと collectionを使用する。
1) member
memberは idで指定した個々のリソースに対するアクションを定義する。
ユーザーのレビューが見れるreviewアクションを追加したいとき、レビューは必ず1人のユーザーがしている
/users/ユーザーのid/review
resources :users do
member do
get 'review'
end
end
2) collection
collectionはリソース全体に対するアクションを定義する。
resources :users do
collection do
get 'show'
end
end