我希望有两个独立的Rails应用程序,它们的视图和样式不同,即它们将共享其余的代码(模型、控制器、路由等,我们称之为"核心")。
有没有什么好的方法可以将应用程序拆分为这样两个独立的部分,以便能够维持开发?现在我已经写了第一个应用程序,我把所有东西都放在一个git存储库中,最后我想有三个独立的repo:两个用于每个应用程序的视图,第三个用于"核心"。
谢谢你的任何想法!
将核心代码提取为Rails引擎,并将其放入gem中。然后,您只需要在每个应用程序中使用gem即可。
这里有一个关于开始使用Rails引擎的指南
更新以解决布局问题
默认情况下,您可以将引擎控制器配置为使用主机应用程序的"应用程序"布局。对此,我使用了两种方法。
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'
。
我能想到的只是视图文件夹中的git子模块,并使用render"app1/controller/action"
您需要一个if语句来呈现app1或app2,您可以将其放在应用程序控制器的before_action
中
将所有在angular或主干网或任何平台上编写的前端代码放在父项目目录的PUBLIC目录中。Rails代码必须在APP目录中。前端可以使用AJAX调用(API调用)与rails代码交互。如果你需要进一步澄清,请告诉我。