首页 > 解决方案 > 不影响 Rails 中类命名空间的目录

问题描述

我正在构建一个 Rails 5.2.x 应用程序,并且正在寻找改进项目目录结构的方法。

我的应用程序中的一些模型类代表事件,我想将它们与其他不代表事件的类分开。

所以理想情况下,我希望有一个events像这样的子目录:

[RAILS ROOT]/app/models/something.rb
[RAILS ROOT]/app/models/events/some_event.rb

其中包含SomethingSomeEvent代表。

Events::SomeEvent不过,在这种情况下,Rails 似乎需要我命名事件类。

我的实际类已经大量使用命名空间,因此名称又长又笨拙。我希望能够在开发过程中轻松地在视觉上分离我的事件类,而不需要它们有更长的名称。

此外,在发生事件的情况下,我想避免更改类名,因为加载历史数据会使用该名称反序列化到正确的类中。

有没有办法在 Rails 中引入额外的子目录而不需要将它们表示为命名空间组件?如果是这样,我真的很想知道如何。

标签: ruby-on-railsrubynamespacesautoloaddirectory-structure

解决方案


约定优于配置的想法是让您以更简单和传统的方式编写代码,尽管 Rails 为您提供了很大的灵活性来在应用程序中反映您的想法。在您的情况下,如果您想在模型中引入其他目录,只需添加config.autoload_paths += %W(#{config.root}/app/models/events)(在我的情况下是图像,图片深同样)在config/application.rb中,这样你的类看起来像:

在此处输入图像描述

我的课程看起来很普通,没有任何命名空间。这应该可以解决您的目的。


推荐阅读