def get_models models = Dir.glob( RAILS_ROOT + '/app/models/*' ).each do |f| models << File.basename( f ).gsub( /^(.+).rb/, '\1') end models end
this solution tracks the event of deriving from ActiveRecord::Base. it has very limited capabilities but maybe it’s helpful for you
class Class @@ar_classes = alias :old_inherited :inherited def inherited(cls)
@@ar_classes << cls if cls < ActiveRecord::Base
old_inherited cls
end def self.ar_classes @@ar_classes end end
derived classes can be dumped with >> Class.ar_classes <<
You can use: ActiveRecord::Base.send :subclasses
Depending on your need, you may want to use the approach of looking for the files. Rails does not load models until necessary, so unless all the models have been used, looking for subclasses through any means will not provide you with all your models.
Dan Manges