Rails错误地将名为namespace的嵌套到了调用者名称空间中

时间:2015-08-27 11:13:16

标签: ruby-on-rails namespaces

Bar调用Foo,Rails认为Foo必须位于Bar命名空间

module Foo
  class Lofatook
    def oops
      puts 'buckets of fun'
    end
  end
end
module Bar
  class Thedoor
    def theyhaveacavetroll
      Foo::Lofatook.new.oops
    end
  end
end
Bar::Thedoor.new.theyhaveacavetroll

这可以作为原始红宝石使用。但是当我将Foo放在lib/foo/lofatook.rbBar app/models/bar/thedoor.rb时,会抛出此错误:

uninitialized constant Bar::Foo

我们正在使用

的金色装载锤
config.autoload_paths += Dir["#{config.root}/lib/"] 
config.autoload_paths += Dir["#{config.root}/lib/**/"]

带来所有光荣的弊端。

但这并不意味着它错误地认为Foo必须属于Bar的一部分?

1 个答案:

答案 0 :(得分:1)

问题还不够

module Foo
    class Lofatook
    end
end
lib/foo/lofatook.rb中的

。您还必须拥有lib/foo.rb

module Foo
end

感谢@ma_il,使用::Foo::Lofatook引发了错误uninitialized constant Foo,这使我指向正确的方向