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