Rails从autoload_path中删除特定的Dir

时间:2014-07-31 08:47:10

标签: ruby-on-rails ruby configuration

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

Dir.glob("#{Rails.root}/app/models/*[^(.rb|.ignore)]").each {|dir| config.autoload_paths << dir }

将任何子目录添加到autoload_paths。只有昨晚我必须将一些模型组合在一起,看起来这并没有加载新创建的文件夹,即使在重新设置应用程序等之后所以我读了Dir.glob并找到了另一种方法。

Dir.glob("#{Rails.root}/app/models/**/*/").each {|dir| config.autoload_paths << dir }

这似乎可以很好地找到任何和所有目录至少一层递归深度。

除了我们的系统需要构建一些与其他系统共享的模型,因此我们在app/models/sms目录中有一些模型与我们系统中已存在的模型具有相同的名称。例如

app/models/account.rb
app/modles/sms/account.rb

如果app/modles/sms/account被自动加载会有冲突,所以我们要从autoload_paths

中移除短信路径
config.autoload_paths -= %W(#{Rails.root}/app/models/sms)

只是将它从加载路径中删除,我们仍然可以通过Sms::Account访问它,这是语义和读取良好。但不知何故,它没有使用新的方式我找到Dir.glob的目录?

我在config / application.rb中删除了一个绑定,只是为了查看config.autoload_paths -= %W( #{Rails.root}/app/models/sms)

之前和之后loadauto_paths中填充的内容

并且它根本没有删除路径?

在红宝石中你可以['a','b'] - ['a'] => ['b']

但是这种情况。 (请原谅大量的代码)

如果我在rails控制台中调用config.autoload_paths -= %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/"]

这似乎不是?我被困在拉出我留下的小头发哈哈。当我使用Regex'尝试'找到所有目录时,它才起作用。我究竟做错了什么。它就像我可以拥有一些我想要的目录,或者所有目录甚至那些我不想要的目录?哈哈

1 个答案:

答案 0 :(得分:2)

Dir.glob("#{Rails.root}/app/models/**[^sms]/*/").each {|dir| config.autoload_paths << dir }

这应该加载除sms目录之外的所有目录。