2012-09-12 149 views
-1

[解决:请参阅下面我的评论]红宝石宝石与Acroynym在名称

我创建了一个Ruby宝石连接到我的应用程序的API:my_app_api。我想这样使用它:MyAppAPI::Foo.bar()。不过,我得到:

NameError: uninitialized constant MyAppAPI 

我知道标准方法来调用/名,这将是MyAppApi::Foo.bar(),但我更愿意保持与缩写类的命名规则。我如何指定/加载模块?

仅供参考,类看起来是这样的:

module MyAppAPI 

class Foo < ActiveResource::Base 
extend MyAppAPI 

self.site = 'http://localhost:3000/api/' 
self.format = :json 

class << self 

    def bar 
    return 'huzzah!' 
    end 

end 

    end 
end 

而且my_app_api.rb文件看起来像这样:

require "rubygems" 
require 'active_resource' 

require 'my_app_api/foo' 
+0

看起来这实际上是RVM问题的结果(我在全局gemset中安装了gem的旧版本,而且没有安装)。感谢您的想法! – ideaoforder

回答

0

您是否尝试加载宝石正常的方式?

require 'my_app_api' 
MyAppAPI::Foo.bar() 

常量名MyAppAPI是好的,是没有问题的原因。有吨的Ruby核心类的/有首字母缩写在其名称中的模块:

+0

我用代码示例更新了这个问题。这个问题肯定与常量名有关,因为如果我在类声明中调整命名,MyAppApi :: Foo.bar()可以正常工作。我确信这是非常简单的事情 - 有些地方我没有声明一些东西。我知道这是微不足道的,而且在其他地方工作得很好 - 我只是不确定我需要做什么改变。 – ideaoforder

0

试试你的require陈述后,宣布在my_app_api.rb空模块:

module MyAppAPI 
end 

T如果你依赖动态类和模块加载机制(如Rails使用),他可能会有所帮助。

我假设你的应用程序明确地调用了require "my_app_api"。这是什么类型的应用程序,你在哪里做require