2016-11-08 69 views
0

我在我的Rails 5应用程序中使用命名空间来尝试保持资源组织。Rails 5 - 命名空间模型

我一直使用命令行生成资源,将命名空间文件夹添加到generate命令。

这使得在该命名空间中的文件被保存在主文件夹中的文件夹模式文件夹。

因为我已经在读别人的暗示命名空间模型的帖子是不是一个好主意。

什么,我现在有一个例子是:

class Stance::Assessment < ApplicationRecord 

这似乎好了工作至今。

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

如果这是一个问题,这是否意味着我不能将我的模型组织到文件夹组中,还是这意味着模型类不需要命名为“Stance ::”?

+1

你可以链接那些抨击namespaced模型?如果你遵循惯例,我无法找到一个引人注目的论据。将这些文件分组到一个名为'stance'的文件夹中,用'Stance'或使用模块(我更喜欢)来预先安排这个类。 –

+0

@AlexandreAngelim https://dhampik.com/blog/rails-admin-scaffold – Mel

回答

2

“命名空间”模型涉及一定的复杂成本。 Ruby实际上并没有真正的命名空间。它具有提供封装的模块。

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

命名空间虽然具有很大的组织优点,但可以避免冲突。但也有在背面上的一些小疼痛:

  • 表前缀,具有类似于my_app_projects_tasks生成的表名实在太不方便了,当你需要编写一个自定义的加入。
  • 您需要覆盖ActiveModel::Naming,以便在使用多态路由帮助程序时不寻找像my_app_projects_tasks_path这样的路径。
  • 您需要在创建关联时明确设置class_name选项或覆盖ActiveRecord如何解析常量名称。
+0

你可以给我一个关于多态路线助手点吗?我试图弄清楚现在http://stackoverflow.com/questions/40518887/rails-5-using-polymorphic-associations-rendering-the-views – Mel