Ruby on rails Rails从自动加载路径中删除特定目录

Ruby on rails Rails从自动加载路径中删除特定目录,ruby-on-rails,ruby,configuration,Ruby On Rails,Ruby,Configuration,不知何故,这个问题比看起来更难。在我们的应用程序中,app/中有一个非常动态的结构。我们可以将文件夹添加到模型目录,以对相关模型等进行分组,我们在这里使用这一行 Dir.glob("#{Rails.root}/app/models/*[^(.rb|.ignore)]").each {|dir| config.autoload_paths << dir } 这似乎做得很好,因为它可以递归地找到至少一层深的任何和所有目录 除了我们的系统需要构建一些它与其他系统共享的模型之外,因此我们在

不知何故,这个问题比看起来更难。在我们的应用程序中,
app/
中有一个非常动态的结构。我们可以将文件夹添加到模型目录,以对相关模型等进行分组,我们在这里使用这一行

Dir.glob("#{Rails.root}/app/models/*[^(.rb|.ignore)]").each {|dir| config.autoload_paths << dir }
这似乎做得很好,因为它可以递归地找到至少一层深的任何和所有目录

除了我们的系统需要构建一些它与其他系统共享的模型之外,因此我们在
app/models/sms
目录中有一些与我们系统中已有的模型同名的模型。比如说

app/models/account.rb
app/modles/sms/account.rb
如果自动加载了
app/modles/sms/account
,则会出现冲突,因此我们需要将sms路径从
自动加载路径中删除

config.autoload_paths -= %W(#{Rails.root}/app/models/sms)
它只是将它从加载路径中删除,我们仍然可以通过
Sms::Account
访问它,这是语义的,而且可读性很好。但不知何故,它不符合我用Dir.glob查找目录的新方法

我在config/application.rb中删除了一个绑定,只是为了查看在
config.autoload_路径-=%W(#{Rails.root}/app/models/sms)之前和之后的loadauto_路径中填充了什么

这是因为根本不移除路径

在ruby中,您可以执行
['a','b']-['a']=>['b']

但是这种情况。(请原谅要遵循的代码太多)

如果我在Rails控制台中调用
config.autoload_path-=%W(#{Rails.root}/app/models/sms)

pry(Toolkit::Application)> config.autoload_paths -= %W( #{Rails.root}/app/models/sms)
  => ["/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/access_to_finance/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/addons/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/beneficiaries/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/bravo_managements/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/bravo_skills_developments/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/economic_developments/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/employment_equities/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/enterprise_and_supplier_developments/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/enterprise_developments/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/generals/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/managements/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/ownerships/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/preferential_procurements/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/scorecard_copier/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/scorecard_copier/alpha_to_bravo_copier/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/scorecards/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/scorecards/alpha/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/scorecards/bravo/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/skills_developments/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/sms/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/socioeconomic_developments/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/spend_items/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/spend_periods/",
  "/Users/fortknokx/Work/toolkit-new_codes/toolkit2/app/models/validators/"]
这似乎不是吗?我被困在拔出我剩下的一点点头发哈哈。当我使用正则表达式“尝试”查找所有目录时,它是有效的。我做错了什么。它就像我可以有一些我想要的目录,或者所有的目录,甚至那些我不想要的?哈哈

Dir.glob(“{Rails.root}/app/models/***[^sms]/*/”)。每个{Dir | config.autoload|u路径
Dir.glob("#{Rails.root}/app/models/**[^sms]/*/").each {|dir| config.autoload_paths << dir }
Dir.glob("#{Rails.root}/app/models/**[^sms]/*/").each {|dir| config.autoload_paths << dir }