Rails 5 - 命名空间模型

时间:2016-11-08 02:37:46

标签: ruby-on-rails namespaces

我在我的Rails 5应用程序中使用命名空间来尝试保持资源的整理。

我通过将namespace文件夹添加到generate命令,使用命令行生成资源。

这会在要保存命名空间文件的主文件夹的models文件夹中创建一个文件夹。

我一直在阅读其他人的帖子,建议使用命名空间模型不是一个好主意。

我目前拥有的一个例子是:

class Stance::Assessment < ApplicationRecord

到目前为止似乎工作正常。

命名空间模型有什么问题?

如果这是一个问题,这是否意味着我无法将我的模型组织到文件夹组中,或者这是否意味着模型类不需要命名为&#34; Stance ::&#34 ;

2 个答案:

答案 0 :(得分:2)

&#34;命名空间&#34;有一定的复杂性成本。你的模特。 Ruby实际上并没有真正的命名空间。相反,它有模块提供封装。

Rails和ActiveRecord是围绕将您的应用程序代码放在Main对象(全局对象)中而设计的。虽然这可能看起来像是一种不好的做法,但它非常简单,并且适用于约定优于配置方法。它还允许更简单的自动加载方案,并且无需将每个文件嵌套在另一个文件夹中。

命名空间确实具有很好的组织优势,可以避免冲突。但是背后有一些轻微的疼痛:

  • 表前缀,如果需要编写自定义联接,生成的表名如my_app_projects_tasks非常不方便。
  • 您需要覆盖ActiveModel::Naming,以便在使用多态路由助手时不会查找my_app_projects_tasks_path之类的路径。
  • 您需要在创建关联时显式设置class_name选项,或覆盖ActiveRecord如何解析常量名称。

答案 1 :(得分:0)

您可以为模型添加前缀,因此您将拥有Stance::Assessment而不是StanceAssessment。不像名称空间那么干净,但是很接近它