Класс и модуль с одинаковым названием - как выбрать тот или иной? - PullRequest
9 голосов
/ 09 февраля 2011

Я столкнулся со следующей ситуацией:

Есть

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 Ответ

20 голосов
/ 09 февраля 2011

Префикс имени класса с :: в методе do_something ...

def do_something
...
    data = ::Order.all
...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...