PIYO - Tech & Life -

Rails5でnamespace以下のxxx_root_pathヘルパーが定義されなかったので回避した

Tips Rails

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が使えるようになりました。