Rails3 で routes.rb を分割・追加する
故あって routes.rb を routes/frontend.rb と routes/backend.rb に分割したいとする。
とりあえず、 routes.rb の中で require なり load なりしてもよいが、これだと開発中に routes/frontend.rb を編集しても、再起動しない限り反映されない。
SampleApp::Application.routes.draw do # : # : end require_relative 'routes/frontend.rb' require_relative 'routes/backend.rb'
そうしないためには、該当のファイルを routes ファイルパス設定に追加する。
config/application.rb の中で以下のように記述する。
module SampleApp class Application < Rails::Application # : # : その他の設定 # : config.paths.config.routes.concat Dir[Rails.root.join("config/routes/*.rb")] end end
あるいは追加したいパスが一つならば、 config.paths.config.routes << Rails.root.join("config/routes/aroute.rb") としてもよいようだ。
(config.paths.config.routes は Rails::Paths::Path なのでそのメソッドを参照。)
そして各ファイルに普通に routes.rb のようにルーティングを記述すればよい。
読み込まれる順番に注意。追加する際と 逆順で読み込まれる 。すなわち、先の例であれば以下のような順で load されることになる。
- config/routes/frontend.rb
- config/routes/backend.rb
- config/routes.rb