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アクションのルーティングが生成されない。

参考サイト

railsguides.jp techtechmedia.com