Why does Object.const_defined?() returns false in this case?

Hi,

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.

Thank you very much in advance! ms

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)

Fred

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?

Thank you, ms

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

ssssssssssssss

Attachments: http://www.ruby-forum.com/attachment/4723/Scrap.shs

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

Fred