當首先加載全局應用程序控制器時,名稱空間應用程序控制器在加載該名稱空間內的頁面時不加載。應用控制器看起來是這樣的:Rails 3.2.3名稱空間控制器被具有相同名稱的全局控制器覆蓋
class ApplicationController < ActionController::Base
protect_from_forgery
end
而命名空間中的應用控制器看起來是這樣的:「authenticate_admin」
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像這樣:
class Admin::AssetsController < Admin::ApplicationController
before_filter :authenticate_admin!
end
「引用Admin :: AssetsController#new中的NoMethodError」。這隻發生在命名空間路由之前我們點擊全局路由時。如果服務器重新啓動並且命名空間路由首先被加載,那麼所有事情都可以正常工作。
這些控制器在哪些文件? –
app/controllers/admin/application_controller.rb, app/controllers/admin/assets_controller.rb和 app/controllers/application_controller.rb –