1

我想以模块化方式构建我的应用程序:例如,我可能有:

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(对于 ember)或 html。两者都不依赖于彼此,这个想法是每个都只是一个细节。Rails、ember 和 html 都只是细节。

我怎么能做到这一点,并在一天结束时将它们像拼图一样连接在一起?或者这甚至可行吗?

现在我几乎完成了这个概念的用户部分。它包含模型、测试、控制器和视图。我可以将它捆绑为 gem 还是应该只捆绑控制器和模型?这个“用户”gem 将使用friendlyId gem 使url 看起来不错,事实上所有的“gem”(项目、任务和用户)都将依赖于这个gem。

你会建议做什么来获得我想要的那种模块化?这是好习惯吗?不好的做法?

4

2 回答 2

2

Pivotal Labs 做了一个演示(Euruko 2013 在雅典),他们展示了一种与您所描述的类似的 Rails 引擎方法。这是演示文稿http://www.ustream.tv/recorded/35107339/highlight/377037

虽然我还没有在实践中看到它,但我愿意。

于 2013-09-27T20:56:11.133 回答
2

我相信使用Rails 引擎是可行的方法。

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

例如Devise - 在您的应用程序中添加大量身份验证功能的 gem 是 Rails 引擎。它提供了自己的控制器、助手、邮件程序和视图,您可以在应用程序中使用它们。

我个人从事的项目使用引擎将 i18n Web 后端(允许将翻译输入和保存到 Redis 的管理页面)插入到许多应用程序中,并将用户的错误报告和问答功能插入到几个现有项目中。

每个引擎都作为 gem 包含在项目中,它可以包含普通应用程序所做的任何事情 - 控制器、视图、模型、资产、其他 gem...

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

于 2013-09-27T20:45:14.800 回答