2013-09-27 41 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的翻譯的管理頁面)到許多應用程序中的項目以及插入用戶的錯誤報告和問題&將功能解答到幾個現有項目中。

每臺發動機被包含在項目的寶石,它可以包含任何正常的應用功能 - 控制器,視圖,模型,資產,其他寶石...

我個人沒有聽說過用這種方法的任何成功故事(但我不知道是否有人嘗試過),所以如果你有一個牢固的概念,也許它會爲你工作。