我在一个大型rails项目中工作,我有一些文件:
应用/服务/ my_service / my_action / my_model_2.rb :
module <my_service>
module <my_action>
class <my_model_2>
. . .
if some_var = <my_model>::MY_CONST
if some_Var = ::<my_model>::MY_CONST # <-- what is the difference here?
应用/服务/ my_service / my_action / my_model.rb :
module <my_service>
module <my_action>
class <my_model>
应用/服务/ my_service / my_model.rb :
module <my_service>
class <my_model>
应用/模型/ my_model.rb :
class <my_model> < ActiveRecord::Base
. . .
MY_CONST = "my constant"
my_model_2.rb有什么区别?
如何从my_model_2.rb正确范围访问每个模型?
请注意,app / models类名与app / services类名相同。
答案 0 :(得分:6)
前导::
强制Ruby解释器开始从顶级命名空间解析类名。这意味着,如果您有一个类Foo::Bar::Baz
并且同时定义了Boo
类/模块
在Boo
内引用Foo::Bar::Baz
实际上会以Foo::Boo
模块/类结尾,而如果您使用::Boo
,它将与Boo
匹配,因为名称的解析将从主命名空间开始。