要求ruby目錄中的全部文件的最佳方法是什麼? ruby
Dir.glob(File.join('path', '**', '*.rb'), &method(:require))
或者,若是要將文件範圍加載到特定文件夾: app
Dir.glob(File.join('path', '{folder1,folder2}', '**', '*.rb'), &method(:require))
說明: ui
Dir.glob以塊爲參數。 spa
method(:require) 將返回require方法。 code
&method(:require)會將方法轉換爲bloc。 get
我沒有像在某些答案中那樣鏈接路徑,而是使用File.expand_path
: io
Dir[File.expand_path('importers/*.rb', File.dirname(__FILE__))].each do |file| require file end
更新: import
您能夠執行如下操做,而不是使用File.dirname
: require
Dir[File.expand_path('../importers/*.rb', __FILE__)].each do |file| require file end
Where ..
__FILE__
的文件名。 擴展
Dir[File.dirname(__FILE__) + '/../lib/*.rb'].each do |file| require File.basename(file, File.extname(file)) end
若是你沒有剝離擴展,那麼你最終可能須要兩次相同的文件(ruby不會意識到「foo」和「foo.rb」是同一個文件)。 兩次須要相同的文件會致使虛假警告(例如「警告:已經初始化常量」)。
我參加派對已經晚了幾年,可是我有點喜歡這個單行解決方案,我曾經習慣性地將全部內容都包含在app / workers / Concer中:
Dir[ Rails.root.join *%w(app workers concerns *) ].each{ |f| require f }
在Rails中,您能夠:
Dir[Rails.root.join('lib', 'ext', '*.rb')].each { |file| require file }
更新:修正了@Jiggneshh Gohel刪除斜線的建議。