Ruby命名空间类混淆

bsc*_*fer 2 ruby ruby-on-rails

这是设置:

# app_controller.rb
class AppController; end

# org/app_controller.rb
module Org
  class AppController < ::AppController; end
end

# org/admin/app_controller.rb
module Org
  class Admin::AppController < AppController; end
end
Run Code Online (Sandbox Code Playgroud)

为什么Org::Admin::AppController继承AppController而不Org::AppController考虑类定义是否为命名空间?

Iro*_*ior 6

这是因为在您打开时Org::Admin::AppController,Org::AppController一定不能定义,但::AppController必须已经定义.也许您的文件不按照您认为的顺序"必需"?您可以通过require <file containing base class>在创建派生类的文件中添加a来解决此问题.

(次要样式指南:不要::用于引用要为定义而打开的类和模块.)

编辑原因:我进行了一些测试,我一定是弄错了.