具有相同名称的类和模块 - 如何选择一个或另一个?

时间:2011-02-09 15:49:01

标签: ruby-on-rails ruby class module

我遇到以下情况:

ModuleA::ModuleB::ClassC.do_something

在do_something的定义中我需要使用应用程序中的模型

def do_something
...
    data = Order.all
...
end

但也存在一个模块

ModuleA::Order

所以我收到错误

undefined method `all' for ModuleA::Order:Module

我通过

找到了解决方案
def do_something
...
    data = Kernel.const_get('Order').all
...
end

返回模型。我的问题是: 什么是最好的方法呢?有更清洁的解决方案吗? (尽管事实上,对于Class和Module具有相同的名称,这不是最好的想法,但它不能在这里改变......)

1 个答案:

答案 0 :(得分:20)

使用::方法中的do_something前缀类名...

def do_something
...
    data = ::Order.all
...
end