According to this:
http://apidock.com/rails/ActiveRecord/Base/subclasses/class
ActiveRecord::Base
had a subclasses
method that simply returned the value of descendants
until version 3.1 (actually this says 3.0.9, but I think this is when it was deprecated; you can see it in the source code until 3.1). descendants
returns everything that is <
the receiver (the behavior you observed).
Here is the commit that removed it:
https://github.com/rails/rails/commit/9b610049bb4f73dbcdc670879683ec2a1a2ab780
Rails 3.1 and after should behave as you describe. If you are using Rails >= 3.1, then I'm not sure how to explain what you are seeing.