2012-01-23 6 views
1

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

#/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 

Когда я звоню б :: a.method хотя я получаю:

NameError: uninitialized constant b::a::a 

Я уверен, что это простое решение, я просто не хватает его.

ответ

3

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

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

Это, (то есть оператор сферы) также объясняется here:

константы, определенные внутри класса или модуля может быть доступен неукрашенным в любом месте в пределах класса или модуля. Вне класса или модуля они могут быть доступны с помощью оператора области видимости ::'' 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 должны начинаться с буквы верхнего регистра.

+0

Большое спасибо. Я знал, что я просто пропустил что-то простое. – Red

Смежные вопросы