Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails可安装引擎使用来自主应用程序的db模式_Ruby On Rails_Ruby_Ruby On Rails 4_Rails Engines - Fatal编程技术网

Ruby on rails Rails可安装引擎使用来自主应用程序的db模式

Ruby on rails Rails可安装引擎使用来自主应用程序的db模式,ruby-on-rails,ruby,ruby-on-rails-4,rails-engines,Ruby On Rails,Ruby,Ruby On Rails 4,Rails Engines,我正在为正在开发的应用程序创建rails引擎 基本上,应用程序分为两部分: 私人的 公开的 私有站点是所有管理功能所在的主要应用程序,公共站点(引擎)应该能够从私有应用程序访问模型 对我来说,这听起来像是相反的,但这是规范所要求的 我知道一般情况下,您会在主应用程序中访问引擎模型,例如: 引擎名::模型 如何访问引擎内部的主应用程序 例如: 私人用户将转到foo.bar/videos/new并创建一个新视频 公共用户可以访问foo.bar/public/videos并访问这些视频。我刚刚测试了这

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

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

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

    对我来说,这听起来像是相反的,但这是规范所要求的

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

    引擎名::模型

    如何访问引擎内部的主应用程序

    例如:

    私人用户将转到foo.bar/videos/new并创建一个新视频


    公共用户可以访问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 %>
    
    主应用程序中的
    #
    #lib/test_library.rb
    测试库
    说点什么
    您好!我是在主机应用程序中定义的,而不是在引擎中定义的
    结束
    结束
    #然后,在发动机内部
    #app/views/your_engine_name/some_resource/index.html.erb
    
    这在引擎模板中打印得很好。因此,如果您有一个
    视频
    模型,您可以在引擎内的控制器中引用它,就像控制器是应用程序的一部分一样

    尽管如此,我不确定发动机模式是否最适合您的要求


    以这种方式编写意味着您不能在其他地方重用引擎代码,如果重用不是您所关心的,那么引擎可能是一个比您需要的更重的解决方案。你可以考虑使用.< /p>将功能分割成私有和公共部分是有意义的,但是为什么这种情况需要你使用引擎模式?我猜这是个好问题,但是看起来你正在跳过不必要的障碍。除了满足“规范”之外,你还想通过这种方式完成什么?规范是由程序员编写的吗?通常我会将功能打包到引擎中,因为我想在其他地方重用它。如果引擎包含来自主机应用程序的代码调用,那么它将不可重用。在这种情况下,我很好奇,你想从把它写成引擎中得到什么好处。如果您只是想在什么是公共的和什么是私有的之间划一条清晰的界限,那可能是谢谢您,是的,我完全同意名称空间更有意义,但我的团队负责人希望这样做,我感谢您的解决方案!