I have foo.rb file inside a lib directory. Can I do something like this
module A
module B
class Foo
end
end
end
I don't want to create folder inside lib directory like this lib/A/B/foo.rb. I just want to place file inside lib directory like this lib/foo.rb. Is this possible in Rails? I am getting uninitialized constant A (NameError) when trying to create new object like this A::B::Foo.new
I am able to create object if i copy/paste above code directly into rails console. But if write that code inside lib/foo.rb file then I am not able to create new object.
Upadate
I already have lib directory in autoload path
config.autoload_paths << Rails.root.join('lib')
CodePudding user response:
You have three options:
- Put code in
lib/a/b/foo.rbwhich is how Rails conventions go. Rails autoloader will find the class there. - Put the code in
lib/a.rbso when autoloader looks for the namespaceAit will load it, find the class you're referencing. - Manually require
lib/foo.rbin every place you're referencing it.
I don't know why anyone would pick option 3 but you're free to ignore Rails conventions and do your own thing. Your life will be much easier however if you follow the convention.
