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

用户3376486

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

假设我想创建一个Cinema模型,它Cinema有很多Cinema::Location模型,每个模型Cinema::Location都有很多Cinema::Location::Movie放映,最重要的是每部电影可能都有一个Cinema::Location::Movie::Review,更不用说每个评论可能都有评论......

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

  • 应用程序/模型/cinema.rb
  • 应用程序/模型/电影院/location.rb
  • 应用程序/模型/电影院/位置/movie.rb
  • 应用程序/模型/电影院/位置/电影/review.rb
  • app/models/cinema/location/movie/review/comment.rb

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

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

文件夹结构如下所示:

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

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

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

杰姆施莱斯

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

如果您查看ActiveRecord 关联文档,您会注意到在第一个示例中,BookAuthor是顶级模型——没有提及Book::Author或类似的内容。这是你的约定。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章