如何在命名空间中使用ruby类

时间:2014-01-28 14:13:03

标签: ruby

我正在模块中编写一个类

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

我不太明白我想做错了。

2 个答案:

答案 0 :(得分:1)

在使用之前定义模块

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

这样您就可以正确定义App模块,然后是Models模块,然后定义Foo类。

答案 1 :(得分:1)

module App::Models表示您在Models模块中定义App模块。但在此之前,您还需要定义模块App。由于你没有这样做,所以错误未初始化的常量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