【问题标题】:How to split Rails application in order to have views and the rest separated?如何拆分 Rails 应用程序以便将视图和其余部分分开?
【发布时间】:2015-03-30 21:28:59
【问题描述】:

我希望有两个独立的 Rails 应用程序,它们的区别仅在于它们的视图和样式,即它们将共享其余代码(模型、控制器、路由等,我们称之为“核心”)。

有没有什么好的方法可以将应用程序分成两个独立的部分以便能够维持开发?现在我已经编写了第一个应用程序,并将所有内容都放在一个 git 存储库中,最后我想拥有三个独立的存储库:两个用于每个应用程序的视图,第三个用于“核心”。

感谢您的任何想法!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    将核心代码提取为 Rails 引擎并将其放入 gem 中。然后,您只需在每个应用程序中都需要该 gem。

    这里是Rails Engines入门指南

    更新以解决布局问题

    您可以将引擎控制器配置为默认使用主机应用程序的“应用程序”布局。为此,我使用了两种方法。

    1) 让引擎控制器从主机应用程序的ApplicationController 继承。有人可能会说这是一种不好的做法,但我认为这是有道理的。

    class MyEngine::HomeController < ApplicationController
      # The layout should default to the host's "application" layout unless otherwise set in ApplicationController.
    end
    

    2) 有一个基础控制器类,所有其他引擎控制器都从该类继承。在基本控制器中将布局设置为“应用程序”。

    class MyEngine::BaseController < ActionController::Base
      layout 'application'
    end
    
    class MyEngine::HomeController < MyEngine::BaseController
    end
    

    3) 您始终可以在每个引擎的控制器中设置layout 'application'

    【讨论】:

    • 这有点棘手但有效。实际上,我要处理的唯一问题是我想为每个应用程序使用不同的布局:如果我将布局设置为 app/views/layouts/application.html.erb,它不会像我习惯的那样默认使用它(为什么?),我必须指定render layout: "application" 在每个控制器的操作中。或者有没有其他方法可以让它默认使用这个布局?
    • 引擎指南模糊地涉及布局问题。您不需要将layout: "application" 添加到所有渲染调用中。请参阅有关使用控制器继承或设置布局的方法的更新答案。
    【解决方案2】:

    我能想到的只是视图文件夹中的 git 子模块并使用渲染“app1/controller/action”

    您需要一个 if 语句来呈现 app1 或 app2,您可以将其放入应用程序控制器中的 before_action

    【讨论】:

      【解决方案3】:

      将所有用angular或backbone或任何平台编写的前端代码放在父项目目录的PUBLIC目录中。 Rails 代码必须在 APP 目录中。 前端可以使用 AJAX 调用(API 调用)与 Rails 代码交互。 如果您需要任何进一步的说明,请告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        相关资源
        最近更新 更多