Rails 中的命名空间模型:联合的状态是啥?

Posted

技术标签:

【中文标题】Rails 中的命名空间模型:联合的状态是啥?【英文标题】:Namespaced models in Rails: What's the state of the union?Rails 中的命名空间模型:联合的状态是什么? 【发布时间】:2010-10-10 17:57:05 【问题描述】:

从一开始,Rails 就遇到了命名空间模型的问题。随着时间的推移,几乎每个人都放弃了使用它。包括我自己。

随着 Rails 2.3 的发布,我想了解最新情况。我想到的具体问题是:

首先,可以走了吗? 表命名,遵循什么规则? 关联,如何以最少的冗长声明它们?如何命名外键列? 自动要求,如果您将模型文件放在与命名空间匹配的子目录中,它是否有效?或者,如何命名和放置文件? 代,模型生成器是否成功且正确地处理命名空间? 代,包括控制器的脚手架生成器怎么样? 应该注意任何不兼容/怪癖?

【问题讨论】:

我意识到我在问这个问题时非常懒惰,因为我可以自己快速研究大多数答案,但我在这里希望有人已经经历了很多痛苦并想要分享吧。 我认为这是一个很好的问题。我期待看到什么回来,因为我是另一个想要它、尝试过、感受到痛苦并放弃的人。 这个问题现在已经很老了。我很好奇随着 Rails 4.0 的发布,情况有了怎样的改善。 【参考方案1】:

我在这个问题上看到的最好的文章来自Strictly Untyped。据我所知,2.3 还没有解决任何问题,这意味着它们仍然不可靠。

【讨论】:

链接现在已断开。既然 Rails 4 出来了,你能提供这个答案的更新吗?【参考方案2】:

我仍然会远离它。当您考虑到代码中的简洁性和清晰度的麻烦和损失时,任何获得的东西(我不确定那会是什么)肯定会丢失。

我最新的应用程序有 87 个资源,并且包括所有地方的管理功能。我认为不需要命名空间,恕我直言。

【讨论】:

嗯,有些人在命名空间上工作得更好,有些人不在乎。你总能找到绕过它的方法,地狱,很多语言都没有。尽管需要/替代方案,但这是一个很好的答案。 这是一个短视的笼统声明。命名空间令人信服的原因不仅在于模型的数量,还在于它们的奇偶性。 等到您的应用程序扩展并尝试让新开发人员快速了解您的应用程序的工作原理并尝试提出此论点。【参考方案3】:

我们最近在公司内部对此进行了一场激烈的辩论。我想在一天结束的时候,我们认为如果你不能在数据库中命名表,那么给模型命名是没有意义的。我们决定为我们的模型添加前缀(用户、用户地址、用户电子邮件地址)并将它们放入用户目录,然后使用:

config.load_paths << "#RAILS_ROOT/app/models/users"

加载模型。为了控制模型中的详细程度,我们经常这样做:

has_many :addresses, :class_name => "UserAddress"

在生成的时候,我们就好像没有命名空间一样创建(脚本/生成模型UserAddress)然后手动复制到用户目录下。

耸耸肩。我想最终这一切真正给你的是一个更干净的目录结构,这对于像我这样的 VIM 用户来说实际上更麻烦,但对 TextMaters 来说很好。

【讨论】:

嗯,真的,作为一个TextMater我必须告诉你,我用cmd+T去文件,我很少使用文件浏览器。无论如何,这有一定的帮助,但你是说你在 rails 2.3 中尝试过命名空间,但它仍然是 SOL? 我在 VIM 中使用类似于 cmd+T 的东西,把东西放在文件夹中的好处是你可以做“m/u/”,而 cmd+T 可能会缩小到模型/ users/,这非常有用(大多数 cmd+t 用户没有意识到斜杠按目录缩小列表) 针对您的其余问题,我们没有在 2.3 中尝试过。此外,我还没有看到 2.3 更改中特别是“绿灯”命名空间模型的任何内容。 “如果你不能在数据库中命名表,那么给模型命名是没有意义的。” Rails 确实允许您拥有多个逻辑数据库 (pullmonkey.com/2008/4/21/…),因此这仍然是需要命名空间模型的好理由。

以上是关于Rails 中的命名空间模型:联合的状态是啥?的主要内容,如果未能解决你的问题,请参考以下文章

删除存在于另一个命名空间 rails 中的模型

Rails 使用同一命名空间中的模型作为 belongs_to 引用,如何从外部引用模型

列出存在于另一个模型中的所有关联模型记录,该模型存在于 rails 中的另一个命名空间中

Rails 4:在没有命名空间模型的子路径中组织 Rails 模型?

如何避免 Rails 脚手架将模型放入命名空间

Rails url_for 和命名空间模型