这个问题在某种程度上比看起来更难。在我们的应用程序中,我们在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)
并且它根本没有删除路径?
在红宝石中你可以['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'尝试'找到所有目录时,它才起作用。我究竟做错了什么。它就像我可以拥有一些我想要的目录,或者所有目录甚至那些我不想要的目录?哈哈
答案 0 :(得分:2)
Dir.glob("#{Rails.root}/app/models/**[^sms]/*/").each {|dir| config.autoload_paths << dir }
这应该加载除sms目录之外的所有目录。