Ruby on Rails:我应该把模块存储在哪里?

24

我是Ruby on Rails的新手,我的问题与基于Rails 3的应用程序设计有关。虽然网上有很多关于在Rails上创建标准网站(如博客)的数据,但我的应用程序需要更多的功能,不仅仅是“发布和阅读”,我不确定该如何实现。

想法:

  1. 模型“Route”包括许多航空公司模块:“Ryanair”、“easyJet”等。
  2. “Route.Update”方法调用每个航空公司模块的“UpdateRoutes”(例如,“Ryanair.UpdateRoutes”,“easyJet.UpdateRoutes”)
  3. 使用更多模型(例如“Flight.find”)和更多航空公司(“Delta.FindFlights”)时,它应该以同样的方式工作

问题:

  1. 我应该把所有模块存储在哪里?我在Rails中看不到任何app/modules文件夹。
  2. 如果我的模块需要gem,我应该把它们包含在模块中还是模型中(它们实际使用的地方)?
  3. 我希望使我的应用程序可扩展。例如,我想添加一个新的运行航空公司(模块),而不改变“Route”、“Flight”或任何其他模型中的任何代码。我想象中的一种方法是“IncludeAirlines”方法,该方法将遍历modules/airlines/name.rb,包括每个模块并调用它的所需方法(例如name.UpdateRoutes)。在Ruby on Rails中是否有更好的实现方式?
1个回答

42

如您所知,模块通常用作命名空间或mixin。

放置模块的位置取决于模块与app目录之间的耦合程度。存储模块的几种模式:

  1. 如果模块不特别“交互”或涉及app/,并且您将模块视为内部插件,则使用/lib目录。

  2. 如果您的模块对业务逻辑至关重要,则/app/models目录是一个合适的位置。此处的一个流行用例是,将模块用作mixin来DRY化您的models/controllers。

  3. 37 Signals引入了一种将它们视为“concerns”并将其存储在app/concerns中的模式。

如果您的模块使用gem,则可能需要在模块中require该gem(有时根本不需要require)。

很抱歉,您的第三个问题不清楚。 不太确定您想做什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接