我在 Rails 5 应用程序中使用命名空间来尝试保持资源井井有条。
我一直在使用命令行生成资源,方法是将命名空间文件夹添加到生成命令中。
这会在模型文件夹中为保存命名空间文件的主文件夹创建一个文件夹。
此后我一直在阅读其他人的帖子,这些帖子表明命名空间模型不是一个好主意。
我目前拥有的一个例子是:
class Stance::Assessment < ApplicationRecord
到目前为止似乎工作正常。
命名空间模型有什么问题?
如果这是一个问题,是否意味着我无法将模型组织到文件夹组中,或者是否意味着模型类不需要使用“Stance::”命名?
最佳答案
模型的“命名空间”会带来一定的复杂性成本。 Ruby 实际上没有真正的命名空间。相反,它具有提供封装的模块。
Rails 和 ActiveRecord 的设计围绕将应用程序代码放置在 Main
对象(全局对象)中。虽然这似乎是一种不好的做法,但它非常简单,并且与约定优于配置的方法配合得很好。它还允许更简单的自动加载方案,并避免需要将每个文件嵌套在附加文件夹中。
命名空间确实具有很大的组织优点,可以让您避免冲突。但背部有一些轻微的疼痛:
- 表前缀,当您需要编写自定义联接时,使用诸如
my_app_projects_tasks
之类的生成表名称确实很不方便。 - 您需要重写
ActiveModel::Naming
,以便在使用多态路由助手时不会查找my_app_projects_tasks_path
等路径。 - 您需要在创建关联时显式设置
class_name
选项或覆盖 ActiveRecord 解析常量名称的方式。
关于ruby-on-rails - Rails 5 - 命名空间模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40478054/