グローバル アプリケーション コントローラーが最初に読み込まれると、その名前空間内のページを読み込むときに、名前空間付きのアプリケーション コントローラーは読み込まれません。アプリケーション コントローラは次のようになります。
class ApplicationController < ActionController::Base
protect_from_forgery
end
名前空間付きのアプリケーション コントローラーは次のようになります。
class Admin::ApplicationController < ApplicationController
def authenticate_admin!
if current_admin.nil?
redirect_to new_admin_session_url
end
end
private
def current_admin
@current_admin ||= Admin.find(session[:admin_id]) if session[:admin_id]
end
helper_method :current_admin
end
before_filter "authenticate_admin!" を使用する場合 このような:
class Admin::AssetsController < Admin::ApplicationController
before_filter :authenticate_admin!
end
「Admin::AssetsController#new の NoMethodError」がスローされます。これは、名前空間ルートの前にグローバル ルートにヒットした場合にのみ発生します。サーバーが再起動され、名前空間付きルートが最初に読み込まれると、すべてが正常に機能します。