Ruby命名空间类混淆

时间:2014-06-13 22:31:47

标签: ruby-on-rails ruby

以下是设置:

# 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

为什么Org::Admin::AppController继承自AppController而不是Org::AppController,因为类定义是命名空间的?

1 个答案:

答案 0 :(得分:6)

这是因为当您打开Org::Admin::AppController时,Org::AppController必须未定义,但::AppController必须已定义。也许您的文件不是必需的&#39;按照你假设的顺序?您可以通过在创建派生类的文件中添加require <file containing base class>来解决此问题。

(次要风格指南:不要使用::来引用您要开放定义的类和模块。)

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