💭

ルーティングのmoduleオプションについて

2024/03/15に公開

内容

PF作成の時にメンターさんに教えて頂いたことをいつもで引き出せるように書いておこうと思います。
ルーティングのセッティングでやらかした時の話です。

routes.rb

    resources :studies do
        :
        :
    end

    resources :users do
        :
        :
    end

"studies"と"users"のルーティングは別々で用意してました。

後から、"user"が持っている"studies"を一覧で表示したいなと思った時に、
"user_studies_path"を用意したいなと思いました。

その為、"users_path"に"studies_path"をネストすればいいと思ったのですが、
"studies_path"をそのままネストすると、"studies_path"にネストしているパスが、

全て"users_path"とネストしてしまう事に気づきました。
Viewに書いてしまっているパスを全て手直ししないといけないと思い、

何か回避方法はないかと教えを請いました。

routes.rb

    resources :studies do
        :
        :
    end

    resources :users do
        :
        :
      resources :studies, only: [:index], module: "users"
    end

結論、"user_studies_path"用の個別の"studies_path"を用意しました。

moduleオプションを使用する事で、"users"にネストされた"studies_controller"への
ルーティングが用意されます。(app/controllers/users/studies_controller.rb)

後は、"appフォルダ"の中に"userフォルダ"を作成して、その中に"studies_controller"を作成します。(Viewも同様)

まとめ

良い方法なのか分かってないところと、後戻りが厳しい状況にならないように開発できるようになったり、事前準備できるようになった方がいいのかなと思いました。

Discussion