2013-09-27 38 views
1

我想建立模块化的方式我的应用程序:比如我可能有:创建Rails的宝石

Users->has_and_belongs_to_many->Projects 
Users->has_and_belongs_to_many->Tasks 
Projects->has_many->Tasks 
Tasks->belongs_to->Project (1 task belongs to 1 project.) 

注意:项目和任务可以有许多用户。

我想建立这样的方法是这样做的:

  • 用户=宝石
  • 项目=宝石
  • 任务=宝石

每一个可以返回JSON(用于烬)或HTML。两者都不相互依存,这个想法是,每个只是一个细节。 Rails,烬和HTML都只是细节。

我怎么能这样做,并在一天结束时把它们拼在一起就像一个难题?或者这是可行的?

现在我有这个概念的用户几乎完成了。它包含模型,测试,控制器和视图。我可以将它作为宝石进行捆绑,还是应该只捆绑控制器和模型?这个“用户”宝石将使用​​宝石,使网站看起来不错,事实上所有的“宝石”(项目,任务和用户)将取决于这个宝石。

你会推荐做什么来获得我想要的模块性?这是不错的做法吗?不好的做法?

+0

你或许可以封装了一些这方面的东西到[引擎](http://edgeguides.rubyonrails.org/engines.html)。如果您确定这些都是独立功能,我只会这样做。 – Noz

回答

2

我相信使用Rails engines是一条路。

每个引擎本身可以是一个应用程序。

例如Devise - 的宝石,增加了很多的认证功能为您的应用程序是一个Rails的引擎。它提供了自己的控制器,助手,邮件程序和视图,您可以在应用程序中使用它们。

我个人正在使用引擎来插入i18n web后端(允许输入和保存到Redis的翻译的管理页面)到许多应用程序中的项目以及插入用户的错误报告和问题&将功能解答到几个现有项目中。

每台发动机被包含在项目的宝石,它可以包含任何正常的应用功能 - 控制器,视图,模型,资产,其他宝石...

我个人没有听说过用这种方法的任何成功故事(但我不知道是否有人尝试过),所以如果你有一个牢固的概念,也许它会为你工作。