2014-01-28 3 views
0

Я пишу класс внутри модулякак требуется рубиновый класс в пространстве имен

#lib/app/models/foo.rb 
module App::Models 
    class Foo 
    def bar 
     true 
    end 
    end 
end 

и когда я попытался запустить спецификации для этого

#spec/lib/app/models/foo_spec.rb 
require_relative '../../../../lib/app/models/foo' 

describe App::Models::Foo do 
end 

я получаю сообщение об ошибке последующей:

rspec spec/lib/app/models/foo_spec.rb 
/Users/frojas/git/tmp/lib/app/models/foo.rb:1:in `<top (required)>': uninitialized constant App (NameError) 
    from /Users/frojas/git/tmp/spec/lib/app/models/foo_spec.rb:1:in `require_relative' 

Я не совсем понимаю, хочу, чтобы я делал неправильно.

+0

Где вы определили 'App'? Сначала вам нужно определить его. Тогда 'module App :: Models' должно получиться. –

ответ

1

Вы имеют для определения модуля перед его использованием:

module App 
    module Models 
    class Foo 
     def bar 
     true 
     end 
    end 
    end 
end 

Таким образом, вы определяете модуль App, затем Models модуль, а затем Foo класс правильно.

+0

Спасибо! это не пространство имен, которое я использую, это был только первый пример, который я придумал. –

1

module App::Models означает, что вы определяете модуль Models внутри модуля App. Но перед этим вам нужно также определить модуль App. Поскольку вы этого не сделали, поэтому ошибка uninitialized constant App (NameError) это пузыри вверх.

Первый

module App 
    # your code 
end 

Тогда

module App::Models 
    class Foo 
    def bar 
     true 
    end 
    end 
end 

Или, как показано ниже:

module App 
    module Models 
    class Foo 
     def bar 
     true 
     end 
    end 
    end 
end 
Смежные вопросы