Rails 5.0.0.1を使って開発中、Rails4のころのようにroutes.rbに書いたものが思ったように動かなかったのでメモしておきます。

以下のようなroutes.rbを書いて、ただのルート(/)とadmin配下のルート(/admin/)を定義します。

1Rails.application.routes.draw do
2  root 'home#index'
3  namespace :admin do
4    root 'home#index'
5  end
6end

そうするとViewではroot_pathやadmin_root_pathといったヘルパーメソッドが使えるはずですが、rake routesなり、Routing Errorのページなりで定義済のURLを一覧してみると、、

このように admin_root_pathがありません。Viewで呼ぶとエラーとなります。

この辺の処理をしているのはactionpack内のActionDispatchあたりです。少し中を追いかけてみたのですが、admin_root_pathのときに想定しているところを通っていないことはわかったものの、根本的な原因を突き止めるには時間がかかりそうだったのでやめて回避策に逃げました。

要はそのrouteの名前が付けばいいので、admin配下のrootところにas: :rootと書いてあげればOK。

1namespace :admin do
2  root 'home#index', as: :root
3end

これでadmin_root_pathが使えるようになりました。