Ruby on Rails在不同的命名空间

时间:2015-08-14 00:28:55

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord namespaces

我在Rails应用程序ApplicationName下有一些类。它们在我的应用程序服务器启动时作为Rails的一部分自动加载。有些是ActiveRecord模型,有些是PORO模型,有些是服务类,也是PORO&。其中一些类具有相同的名称,但位于不同的名称空间中,例如UserNameSpaced::User,它们表示具有相似概念的不同对象。

在其中一个命名空间类中,我做了一些ETL工作,以便将外部对象融合到我的数据库中的ActiveRecord模型中。由于默认情况下ActiveRecord模型位于全局ApplicationName命名空间下,因此我认为ApplicationName::ModelName会起作用,我希望它返回顶级对象(ActiveRecord模型) 。相反,我得到了一个未初始化的常量错误。 ApplicationName::Application::ModelName返回它,但是我收到一个关于引用toplevel命名空间的类的警告(正如我所料,考虑到ActiveRecord对象驻留在那里)。 ModelName模型与不同命名空间下的另一个模型冲突(为了论证我们称之为DifferentNameSpace)。事情看起来像:

module ApplicationName
  class Application < Rails::Application
   # do autoload stuff here
  end
end

class ModelName
end

module DifferentNameSpace
  class ModelName
  end
end

有没有办法在没有警告的情况下专门致电ApplicationName::ModelName或进行ApplicationName::Application::ModelName?现在它可以工作::ModelName,但看起来很难看。

0 个答案:

没有答案