在Rails中组织命名空间和相关模型

时间:2017-06-14 03:10:15

标签: ruby-on-rails model

我在组织Rails项目及其有关文件夹结构和约定的模型方面遇到了一些麻烦,我似乎没有找到任何与此相关的内容。

假设我要创建一个Cinema模型,此Cinema包含多个Cinema::Location模型,每个Cinema::Location都有许多Cinema::Location::Movie个模型,除此之外每部电影可能都有Cinema::Location::Movie::Review,更不用说每篇评论可能有评论......

我的文件夹结构如下所示:

  • 应用程序/模型/ cinema.rb
  • 应用程序/模型/电影/ location.rb
  • 应用程序/模型/电影/位置/ movie.rb
  • 应用程序/模型/电影/位置/电影/ review.rb
  • 应用程序/模型/电影/位置/电影/评论/ comment.rb

这是一个有组织的解决方案,但与此同时,它看起来不太好,如果我们谈论表格(cinema_location_movie_review_comment_replies)会更糟。

我可以做的一件事就是组织这样的模型:Cinema::Location用于位置,Location::Movie用于电影,Movie::Review用于评论等。

文件夹结构如下所示:

  • 应用程序/模型/ cinema.rb
  • 应用程序/模型/电影/ location.rb
  • 应用程序/模型/位置/ movie.rb

这解决了表名(location_moviemovie_review)的问题。

是否有关于多级命名空间模型的约定?

1 个答案:

答案 0 :(得分:1)

你有没有问过自己为什么要将你的模型嵌套?在我看来,你正试图将名称空间命名为执行逻辑,最好留给关联。

如果您查看ActiveRecord associations docs,您会注意到在第一个示例中,BookAuthor是顶级模型 - 没有提到{{1}或类似的东西。这是你的惯例。

随着您的应用程序变得越来越大,越来越复杂,可能会出现模型命名空间合适的情况(例如,特定于不同用户类型的资源),但我不认为它就在这里。