The same problem also occurs with libraries, which may also have their own executables, so these tools have tried to solve both problems - which is slightly more complicated than a three line shell script. Bundler has become the standard way of managing libraries, so now something like chruby[0] can be used to do pretty much what you said for the interpreter alone. Of course the other tools (that do a lot more) still have their historical followers...
If you are wondering why you need to support multiple versions, these tools are mainly for use in development environments where you will probably have to support legacy software that is no longer actively maintained.
[0] https://github.com/postmodern/chruby/blob/master/share/chrub...
As others mention, scripts typically just run "ruby" (via shebang or directly), which will pick whatever is the default.
Debian/Ubuntu have the "alternatives" system, which is designed to solve this for any kind of program, but it's virtually impossible to use by humans; there's no single command to switch between versions.
Fortunately, the ruby-switch package [1] wraps the terrible UI in a single command to switch versions. I highly recommend it.
Of course, this switches the version globally. To get per-shell Ruby versions, you will need the other tools mentioned in this thread.