gpt4 book ai didi

ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:54 28 4
gpt4 key购买 nike

我们目前正在为 ROR 3.2 开发自定义 cms 引擎。在这个过程中,我们希望成为我们的 rails 应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的 app 文件夹下,它是插件。

目前我们有以下类型:

  • 数据源
  • 数据类型
  • 查看

我在 app 文件夹下创建了多个目录来保存这些:

  • 应用/数据源
  • 应用/数据类型
  • 应用/ View

更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含 cms 定义的所有类型。

所有类都应位于 MyCms 命名空间内,目录布局应如下所示:

  • 应用程序/my_cms/data_source
  • 应用程序/my_cms/data_type
  • 应用程序/my_cms/ View

但是现在我遇到了自动加载的问题,因为 Rails 默认的自动加载会期望路径是这样的:

  • 应用程序/data_source/my_cms
  • 应用程序/data_type/my_cms
  • 应用/ View /my_cms

但这样我就不会将所有对象类型分组到一个目录中。

我想要的有点类似于隔离引擎的 View 分组。在 Devise例如,所有 View 都分组在 views/devise 子目录中。

知道如何在没有太多自定义实现的情况下实现这一点吗?

最佳答案

您必须将 app/my_cms 添加到 config/application.rb 中的自动加载路径:

config.autoload_paths << "#{config.root}/app/my_cms"

假设您的类定义时没有像这样的 namespace :

class DataSource
...
end

如果您在 app/my_cms/data_source.rb 中像这样命名它们:

class MyCms::DataSource
...
end

您可以将应用文件夹添加到加载路径:

config.autoload_paths << "#{config.root}/app"

或者,您可以手动执行此操作,但在 Rails 开发中会丢失这些类的重新加载:

在 app/my_cms.rb 中(并自动加载应用):

module MyCms
autoload :AnotherDataSource, 'my_cms/data_source/one_data_source'
autoload :AnotherDataSource, 'my_cms/data_source/another_data_source'

...
end

关于ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14497196/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com