当首先加载全局应用程序 Controller 时,命名空间应用程序 Controller 在加载该命名空间内的页面时不会加载。应用程序 Controller 如下所示:
class ApplicationController < ActionController::Base
protect_from_forgery
end
命名空间应用程序 Controller 如下所示:
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”。只有当我们在命名空间路由之前访问全局路由时才会发生这种情况。如果服务器重新启动并且首先加载命名空间路由,则一切正常。
最佳答案
发生这种情况是因为您也碰巧有一个与您的命名空间同名的 Admin
模型(一个类)。
This Google 群组帖子很好地解释了到底发生了什么。
要解决此问题,我会将模型重命名为 AdminUser
,或者如果这不可能,重命名命名空间也可以解决此问题。
关于ruby-on-rails - Rails 3.2.3 命名空间 Controller 被具有相同名称的全局 Controller 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902023/