当引擎和主机应用具有相同的型号名称时,抓取主机应用程序活动记录对象

时间:2015-06-15 16:48:33

标签: ruby-on-rails ruby

我有一个主机应用unicorn,型号为Article

我还有一个挂载到名为blorgh的主机应用程序中的可挂载引擎。它还有一个模型:Article。它是命名空间,因此引擎文章的表名实际上是blorgh_articles

在引擎内部,我想抓住主机应用article 引擎的article 。这可能吗?

#blorgh/app/controllers/blorgh/articles_controller.rb
require_dependency "blorgh_application_controller"
module Blorgh
  class ArticlesController < ApplicationController
    def index
      @articles = Article.all #properly grabs all the engine's articles
      @host_app_articles = main_app.Article.all # this doesn't work. It should grab the host app's articles.
    end
    ...
  end
end

1 个答案:

答案 0 :(得分:1)

使用::Article引用顶级命名空间类,使用MyEngine::Article引用引擎类。

虽然在Article命名空间内单独使用MyEngine将正确解析,但这样做会带来一些陷阱:

  • 理解你的代码会让人感到困惑,因为有多个引用模糊的Article
  • 如果您曾将MyEngine::Article课程重命名为其他内容,但在此更改期间错过了对Article的引用,则相同的代码现在将更改为引用全局::Article 。这可能会也可能不会破坏您的规格,并且可能会引入意想不到的行为。