gpt4 book ai didi

ruby-on-rails - 在rails app目录中将文件夹作为模块常量加载的方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:46 24 4
gpt4 key购买 nike

所以有一个 Rails 5 项目并且想要加载这样的目录

/app
/services
/user
foo.rb

作为常量::Services::User::Foo

有没有人有使用 Rails 自动加载路径以这种方式加载常量的经验?


foo.rb

module Services
module User
class Foo

end
end
end

解决方案

将此添加到您的 application.rb 文件

config.autoload_paths << Rails.root.join('app')

在此处查看有关自动加载的讨论

https://github.com/rails/rails/issues/14382#issuecomment-37763348 https://github.com/trailblazer/trailblazer/issues/89#issuecomment-149367035

最佳答案

自动加载

您需要在 app/services/services/user/foo.rb 中定义 Services::User::Foo

如果你不想要这个奇怪的子文件夹重复,你也可以将 services 移动到 app/models/serviceslib/services .

您也可以将 foo.rb 保留在 app/services/user/foo.rb 中,但它应该定义 User::Foo .

预加载

如果您不需要任何有关 namespace 和类名的魔法,那非常简单:

Dir[Rails.root.join('app/services/**/*.rb')].each{|rb| require rb}

这将急切地加载 app/services 和任何子文件夹中的任何 Ruby 脚本。

关于ruby-on-rails - 在rails app目录中将文件夹作为模块常量加载的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40921032/

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