我正在为我正在处理的应用程序创建一个 Rails 引擎。
基本上,应用程序分为两个部分:
- 私有(private)
- 公开
私有(private)站点是所有管理功能所在的主要应用程序,公共(public)站点(引擎)应该能够从私有(private)应用程序访问模型。
这听起来好像与我相反,但这是规范所要求的。
我知道通常您会在您的主应用程序中访问引擎模型:
引擎名称::型号
我如何访问引擎内的主应用程序?
例子:
私有(private)用户会去 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
模型,您可以在引擎内的 Controller 中引用它,就像 Controller 是您的应用程序的一部分一样。
话虽如此,我不确定引擎模式是否最适合您的要求。
以这种方式编写意味着您不能在其他地方重用引擎代码,如果重用不是您关心的,那么引擎可能是比您需要的更重量级的解决方案。您可以考虑使用 namespace .
关于ruby-on-rails - Rails 可安装引擎使用来自主应用程序的数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37819927/