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

标签 ruby-on-rails ruby ruby-on-rails-4 rails-engines

我正在为我正在处理的应用程序创建一个 Rails 引擎。

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

  1. 私有(private)
  2. 公开

私有(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/

相关文章:

ruby-on-rails-4 - 虚荣心:每个用户一个实验

ruby-on-rails - Devise 中两种截然不同的用户模型

ruby-on-rails - Sidekiq 不断重启 Cloud66

ruby-on-rails - Rails 3.2 错误路由问题。错误 ID 与其他对象 ID 冲突

javascript - 是什么阻碍了 Ruby、Python 来获得 Javascript V8 速度?

ruby - 将 ruby​​ 正则表达式定义转换为 python 正则表达式

mysql - 同时在两个具有相同记录的数据库中创建 Devise 用户

mysql - Rails数据库结构及优化建议

ruby-on-rails - 无法使具有 has_one 关联的嵌套表单正常工作

ruby-on-rails - 关于 attr_accessor 和 def initialize