I want to extend core Array class with simple method:
class Array
def to_hash
result = Hash.new
self.each { |a| result[a] = '' }
result
end
end
I put array.rb into lib/core_ext and tried to require it in application.rb by
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
But still get undefined method 'to_hash' for ["var1", "var2", "var3"]:Array
if tried to use it in model method. Of course I rebooted the server after code changes.
Once way you can do this is by adding the following to one of the files in
config/initializers
All your
autoload_paths
config value does is make the paths available for when the classes/files are requested. In my app I might have some file structure as followsIn my
deefour.rb
I haveand inside
config/initializers
I have adeefour.rb
file containing simplyThe only way the autoload config value you set will cause Rails to look auto load
lib/deefour/core_ext.rb
is if you had some call to a classDeefour::CoreExt
that existed in that file. This is why myrequire 'deefour'
line in the initializer knows to autoload thelib/deefour.rb
file.The explicit
require 'deefour/core_ext'
inlib/deefour.rb
serves the same purpose, since it too does not follow the standard class-name-to-directory mapping Ruby/Rails will expect.