For this reason, and to avoid autoloading a ton of other classes at either Rails initialization or when a specific class is loaded, Rails uses a string to specify the class name of an association if required to be specified, e.g.
has_many :published_posts, class_name: 'Post'
because associations have the greatest tendency to have interactions like this.
So, if you have control over what you use and can delay load of a constant until it is needed in Ruby/Rails by using a string to hold the name of the constant until you need to constantize it, it might not be a bad idea. But, like anything, the best solution depends on your requirements.
This may seem wierd if you are coming from another programming language background like Java where historically, at least, developers would avoid using reflection to dynamically instantiate a class from a String because of the overhead (at least in older versions) and the possibility of errors when loading the class later versus catching them early-on at startup. But, it really isn't a bad thing here. And this also doesn't stop you from eager loading as much as you want up-front, because really what it is doing is eliminating the direct dependency caused by constant reference during the load.