今まで何となくしか理解できていなかったルーティングですが、
自分でアプリケーションを作るようになるとそういうわけにもいかず。
きちんと勉強しまくったところ、深いところまで知ることができたので
きちんと残しておこうと思います。
固有のアクションを追加する
大抵のアクションはresourcesで生成される7つでまかなえると思いますが、
中には固有のアクションを指定したい場合もあると思います。
そんな時に便利なのがmenberとcollection。
resourcesにネストさせる形で書けば、getで指定したアクションに対してルーティングを作成してくれます。
menberとcollectionの違いは、:idをつけたいかどうか。
ネストさせて:idが複数ある場合のprefixの使い方
たとえばproductsにreviewsをネストさせている場合。
reviewsをeditしたりdestroyしようと思ったら、product_idのみならず
reviewsのidも当然パスに含まれてきます
こんな感じ。
prefixを使う場合、prefix_path()のように引数にインスタンスの情報を持たせますが、
この状態の場合は引数にproduct_idとreviewのid両方を入れなきゃいけないんですね
と言ってもそんなに難しいことはなく、冷静に親、子の順で引数を書けば良いだけ。
※ちなみに、editやdestroyはproduct_idがなくても直接関係しているreviewsのidだけで良いじゃん、、、!と思ってあえてネストさせずにやったところ、
そうすると正常にeditアクションが動きませんでした。(destroyは動いた)
こういう場合は、ちょっとめんどくさいけど
きちんとネストさせた上でidを二つ持たせる方が良いみたいです。
※とは言っても、あまりネストさせすぎるのは複雑化するので良くない。
公式リファレンスでもそのような記述があります
ネストが何段にも重なりそうになってしまったら、
そもそものDB設計から考え直した方が良いかもしれません。
↓参考