当首先加载全局应用程序控制器时,在该命名空间内加载页面时,命名空间应用程序控制器不会加载。应用程序控制器如下所示:
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”。这只发生在我们在命名空间路由之前点击全局路由时。如果服务器重新启动并首先加载命名空间路由,则一切正常。