thank you for reading my post. I'll shortly describe my problem.
I want to probe if a class is defined, and if it is, I want to
instantiate it. Let's assume, the class name is "DemandType" and it
exists:
Object.const_defined?("DemandType") => false
Object.const_get("DemandType") => Class
Why does const_defined?() returns false in this case? I have also
tested it in rails console, but it was not successful. I could also
work with const_get() alone and catch the NameError exception, but I
would really like to know why const_defined?() is not working.
Are you in development mode ? If so classes aren't loaded until they
are needed. const_defined? is returning false because the class does
not exist in memory. const_get triggers Rails' const_missing handler
which loads the class (and so const_get can then return it)
Thanks for the quick answer! Yes, I am in development mode and this is
actually the problem as you described. How can I force Rails even in
development mode to load ALL classes, is that possible?
Thanks for the quick answer! Yes, I am in development mode and this is
actually the problem as you described. How can I force Rails even in
development mode to load ALL classes, is that possible?
As far as I know there's not a nice way of doing this in general
without losing class reloading
If there's only a subset of classes for which this is important you
could stick a bunch of calls to require_dependency at the bottom of
application_controller.rb
It's not really even a development vs production environment question.
Rails in general loads missing constants when referenced. The
difference in the development environment is that it cleans them out
between requests.
Why do you need to use const_defined? Just refer to the class by name
and let Rails do it's thing.
It's not really even a development vs production environment question.
Rails in general loads missing constants when referenced. The
difference in the development environment is that it cleans them out
between requests.
Actually Rails loads just about everything ahead of time in production
since 2.2 or 2.1 (don't remember which) as part of the thread safeness
work. The const_missing hook is still there, it is just unlikely to
get used in production