我在我的Rails 5应用程序中使用命名空间来尝试保持资源的整理。
我通过将namespace文件夹添加到generate命令,使用命令行生成资源。
这会在要保存命名空间文件的主文件夹的models文件夹中创建一个文件夹。
我一直在阅读其他人的帖子,建议使用命名空间模型不是一个好主意。
我目前拥有的一个例子是:
class Stance::Assessment < ApplicationRecord
到目前为止似乎工作正常。
命名空间模型有什么问题?
如果这是一个问题,这是否意味着我无法将我的模型组织到文件夹组中,或者这是否意味着模型类不需要命名为&#34; Stance ::&#34 ;
答案 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
。不像名称空间那么干净,但是很接近它