ruby-on-rails - Rails 5 - 命名空间模型

标签 ruby-on-rails namespaces

我在 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/

相关文章:

ruby-on-rails - Capybara + Poltergeist with Database-cleaner 找不到 FactoryGirl 记录

javascript - 如何处理 Rails to_json 输出中的 HTML 实体?

node.js - Socket.io:命名空间、 channel 和合作

android-layout - 布局 xml 文档中的 Android "tools"命名空间

ruby-on-rails - 存储 Web 服务密码的最佳实践

ruby-on-rails - 我可以在 Rails 服务中运行 Kiba 作业吗?

c++ - 统一调用语法的 C++17 提案打算如何处理 namespace ?

python - 导入模块中全局变量的可见性

namespaces - Perl:匿名子程序中的原型(prototype)

ruby-on-rails - 如何找出哪个 Ruby gem 劫持了 ActiveRecord 关联方法