Rails 可安装引擎使用来自主应用程序的数据库模式

Rails mountable engine use db schema from main application

我正在为我正在开发的应用程序创建一个 rails 引擎。

应用程序基本上分为两部分:

  1. 私人
  2. Public

私有站点是所有管理功能所在的主要应用程序,public 站点(引擎)应该能够从私有应用程序访问模型。

这听起来好像与我相反,但这是规范要求的。

我知道一般情况下您会在主应用程序中访问引擎模型:

引擎名称::型号

如何访问引擎中的主应用程序?

示例:

私人用户会去 foo。bar/videos/new 并创建一个新视频。

public 用户会去 foo。bar/public/videos 并可以访问那些相同的视频。

我刚刚对此进行了测试,并且能够毫无问题地从引擎内部的主机应用程序引用代码。

# In the main application
# lib/test_library.rb
TestLibrary
  def self.say_something
    "Hello! I am defined in the host application, not the Engine."
  end
end

# Then, inside the engine
# app/views/your_engine_name/some_resource/index.html.erb
<%= TestLibrary.say_something %>

这在引擎模板中打印得很好。因此,如果您有一个 Video 模型,您可以在引擎内的控制器中引用它,就像控制器是您的应用程序的一部分一样。

尽管如此,我不确定引擎模式是否最适合您的要求。

这样写意味着你不能在别处重用引擎代码,如果重用不是你关心的,那么引擎可能是一个比你需要的更重量级的解决方案。您可以考虑使用 namespace.