LoginSignup
4
3

More than 1 year has passed since last update.

Rails6 で routes.rb を分割する

Last updated at Posted at 2020-10-29

やりたいこと

ルーティングの定義ファイル config/routes.rb を複数のファイルに分割したい。
具体的には lib/my_app/routes.rb というファイルを用意していて、それを読み込またい。

昔の解決策

2015年の記事 https://y-yagi.tumblr.com/post/118514473965/ がヒットするが、そのままだとうまく行かない。
draw の定義と実行までは上手くいくけど、リロードさせるあたりの仕組みが古くなっているらしくて失敗する。

rails 7 の解決策

ralis 7 では標準対応している。

rails 6 の解決策

Rails6 ではルーティングの読み込み方がかなり整理されていて自分でリロードさせたりする必要はなさそう。
https://qiita.com/ryohashimoto/items/7caf905389ccb5d7d8fb#configroutesrb%E3%81%A7%E5%A4%96%E9%83%A8%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E3%81%93%E3%81%A8%E3%81%8C%E5%8F%AF%E8%83%BD%E3%81%AB


Rails::Application::RoutesReloader というクラスが定義されおり、これに正しいパラメータが渡せればそれで完成する。
config/routes/ 配下に routes.rb を分解していくなら下の記事に書いてある方法がよさそう。

ただこれだと任意のファイルを読み込ませることができなかったので自分は別の方法を選択した。

他の解決策

ルーティングの読み込みは initializers の中の add_routing_paths というところでやっている。
なのでその initializers の一個前に path を追加するような設定をかけば良いと思った。

具体的には config/application.rb に下記の設定を追記した。

config/application.rb
    initializer('add_my_app_routing_paths', before: 'add_routing_paths') do |app|
      routing_path = root.join('lib/my_app/routes.rb')
      app.routes_reloader.paths.prepend(routing_path)
    end

これで一応期待したとおり lib/my_app/routes.rb で定義したルーティングが読み込まれるようになっていた。
リロードされないという副作用もなさそうだったのでこれで行くことにした。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3