ruby-on-rails - Rails 3.2.3 命名空间 Controller 被具有相同名称的全局 Controller 覆盖

标签 ruby-on-rails ruby ruby-on-rails-3.2 controllers nomethoderror

当首先加载全局应用程序 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/

相关文章:

ruby-on-rails - 用于 Ruby on Rails 的 Sendgrid API

ruby-on-rails - 使用 Rails 转发 HTTP 请求

ruby - Google 使用 Ruby 进行应用程序开发吗?

ruby-on-rails - 使用 ActiveSupport::Concern 功能时,如何通过将 "nested"模块包含为该类的实例方法来将方法添加到类中?

ruby - 使用 RbConfig 而不是过时和弃用的配置

ruby-on-rails-3 - 从 Assets :precompile in rails 中排除文件

mysql - 使用 Ruby on Rails 忽略 MySQL 查询中的重音

javascript - 如何在 React.js 前端应用程序中显示来自 Rails 5 API 的数据?

ruby - 没有 rails 的 rspec - 未初始化的常量

ruby-on-rails - ActiveRecord::Relation 返回不同的类对象