我有以下mongoid模型继承自Entry模型:
class Entry::Twitter < Entry
field :retweet_count, :type => Integer, :default => 0
field :retweeted, :type => Boolean, :default => false
field :favorited, :type => Boolean, :default => false
# in_reply_to_screen_name, in_reply_to_status_id_str, in_reply_to_user_id_str
field :reply, :type => Hash
field :from, :type => Hash # user: id_str, name, screen_name
field :time, :type => Time # created_at
field :data, :type => Hash # entities (hashtags and user_mentions)
field :assets, :type => Hash # urls from original entities
field :service, :type => String, …
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有
class User
include User::Foo
end
Run Code Online (Sandbox Code Playgroud)
User::Foo
在app/models/user/foo.rb中定义
现在我正在使用一个定义自己的Foo
类的库.我收到这个错误:
警告:toplevel User :: Foo引用的常量Foo
User
仅指Foo
完整路径User::Foo
,并且Foo
从不实际引用Foo
.
这是怎么回事?
更新:记得以前我遇到过同样的问题,在问题1中看到:如何在ruby中引用子模块的"完整路径"?
在我的应用程序中,我有
VeryUniqueModule::Foo
# and…
VeryUniqueModule::Bar
Run Code Online (Sandbox Code Playgroud)
Foo
并且Bar
每个都是为不同的服务.我的应用程序的一部分必须动态地确定要引用的模块,它可以这样做:
def service_api
# @relevant_object.service is a string that is either 'Foo' or 'Bar'
VeryUniqueModule.const_get(@relevant_object.service)
end
Run Code Online (Sandbox Code Playgroud)
稍后会详细介绍.
我刚刚更新了一个库,现在它有自己的顶级Foo
类(这是一个糟糕的设计).现在,当我尝试调用时@relevant_object.service_api::A_CONSTANT
,我的应用程序抱怨图书馆 Foo
没有A_CONSTANT
.
回到service_api
上面 - 我以为那const_get
是回归班级本身.事实上,我知道它是.如果我在irb
所有内容中按照预期启动它- 返回值是类本身,我可以调用类中的东西.所以…
A_CONSTANT
的Class对象service_api
,而不是我正在使用的字符串eval
或类似的那些时髦的东西 - 应该没有任何命名空间问题,我直接指的是一个对象!service_api
该如何修复以便它将返回,嗯,"完整路径"?