🍈

Rails ルーティングのネスト

2023/04/18に公開

今日のミス

いいね機能の作成途中で、book indexページのいいねを押すとエラーに、、

なぜbook_idが渡されていないか?
👇
ルーティングをネストしていなかったから!!

ルーティングのネストとは

あるコントローラへのルーティングの記述の中に、別のコントローラへのルーティングを記述すること。

resources :books, only: [:index,:show,:edit,:create,:destroy,:update] do
    resource :favorites, only: [:create, :destroy]
end

親のresourcesで指定したコントローラ名に、子のresourcesで指定したコントローラ名が続くURLが生成された!
このような親子関係を、「ネストする」と言う。

ネストしたURLを作成することで
params[:book_id]でBookのidが取得できるようになった🙆🏻‍♀️

resouceについて

resourcesを単数形にすると、/:idがURLに含まれなくなる!!

いいね機能の場合は「1人のユーザーは1つの投稿に対して1回しかいいねできない」という仕様なので、ユーザーidと投稿(book)idが分かれば、どのいいねを削除すればいいのかが特定できる!

そのため、いいねのidはURLに含める必要がないURLに/:idを含めない形にしている。

resourceは「それ自身のidが分からなくても、関連する他のモデルのidから特定できる」といった場合に用いることが多い。


いいね機能、コメント機能、フォロー機能、検索機能で
アソシエーションの理解の大事さを痛感した、、!

調べながら自力でやったもののコピペばっかりしちゃって
理解しきれていない気がするから再度復習しよう。

明日はキャリアガイダンスと私用があるから
早く起きて勉強時間確保するぞ。
1ヶ月が早い早い。
パワーー

Discussion