Проблема пространства имен модели в рельсах - PullRequest
1 голос
/ 23 января 2012

У меня проблема с пространствами имен в Rails 3.1. У меня есть класс, давайте назовем его.

#/app/models/a.rb
class a
  #some methods
  def self.method_from_a
    #does things
  end
end

Но у меня также есть другой класс с таким же именем в другом пространстве имен.

#/app/models/b/a.rb
class b::a
  def method
    return a.method_from_a
  end
end

Когда я вызываю b :: a.method, я получаю:

NameError: uninitialized constant b::a::a

Я уверен, что это простое решение, я просто скучаю по нему.

1 Ответ

3 голосов
/ 23 января 2012

Префикс a с :::

class b::a
  def method
    return ::a.method_from_a
  end
end

Это (т. Е. Оператор области действия) также объясняется здесь :

КонстантыОпределенный в классе или модуле может быть доступен без украшения в любом месте в пределах класса или модуля.Вне класса или модуля к ним можно получить доступ, используя оператор области действия ::'' prefixed by an expression that returns the appropriate class or module object. Constants defined outside any class or module may be accessed unadorned or by using the scope operator :: '' без префикса.

Кстати, в Ruby имена классов должны начинаться с заглавной буквы.

...