Rails 5.0.0.1を使って開発中、Rails4のころのようにroutes.rb
に書いたものが思ったように動かなかったのでメモしておきます。
以下のようなroutes.rb
を書いて、ただのルート(/
)とadmin配下のルート(/admin/
)を定義します。
Rails.application.routes.draw do
root 'home#index'
namespace :admin do
root 'home#index'
end
end
そうすると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。
namespace :admin do
root 'home#index', as: :root
end
これでadmin_root_pathが使えるようになりました。