Rails resourcesメソッドとネストについて
resourcesメソッド
railsで定義されている7つのアクション(show,new,create,edit,update,destroy,index)のルーティングを自動で生成する。 resourcesメソッドはルーティングを記述するroutes.rbの中で使用する。
#routes.rb Rails.application.routes.draw do resources :コントローラー名 end
ルーティングがネストするときもresourcesメソッドを使うことができる。
ネスト
ルーティングを入れ子にすることで親子関係を作る。論理上、他のリソースの配下に子リソースを配置することはよくある。
たとえばこのようなパターンの場合
#各モデル class Board < ApplicationRecord has_many :comments end class Comment < ApplicationRecord belongs_to :board end
なおresourcesメソッドのネストを使った記述は下記。
#routes.rb resources :boards do resources :comments end
浅いネスト(shallowオプション)
上記までのネストで記載すると、ルーティングはこのようになる。
コメントの詳細画面画面・・・/boards/:board_id/comments/:id
コメントの編集画面・・・/boards/:board_id/comments/:id/edit
コメントの更新・・・/boards/:board_id/comments/:id
コメントの削除・・・/boards/:board_id/comments/:id
これはこれで問題ないが、例えばコメントを削除する際に掲示板の情報は本当に必要なのか?コメントのidさえ分かっていれば良いので/comments/:idで良いのではないか?そう言った場合に使うのがshallowオプション。
#実装例 config/routes.rb resources :boards, only: %i[index new create] do resources :comments, shallow: true end
上記でURLを短縮できる。
resourceとresourcesの違い
resourceメソッド...ルーティングがidなしで生成される。加えて、「resourceメソッド」はindexアクションのルーティングが生成されない。