find_by_sql suggestions needed

I have an application that generates an ever growing list of stock
reports. I find myself some method in a controller creating a
connection to the database (postgres in this case), executing a custom
sql, using the data returned to create one or more graphs with gruff,
and sending them off to be displayed.

This puts the creation of a connection to the database, and the actual
sql in the controller. I am not sure that this is such a good idea. I
am looking for suggestions on a better approach.

Should I create a separate class with a method to match each arbitrary
sql returning the data from a method call?

Should the queries be converted to stored functions which then get
called from the controller, or a separate class?

Insights would be appreciated.