У меня была такая ситуация, когда мне приходилось подключаться к сотням разных экземпляров внешнего приложения, и я делал код, подобный следующему:
def get_custom_connection(identifier, host, port, dbname, dbuser, password)
eval("Custom_#{identifier} = Class::new(ActiveRecord::Base)")
eval("Custom_#{identifier}.establish_connection(:adapter=>'mysql', :host=>'#{host}', :port=>#{port}, :database=>'#{dbname}', " +
":username=>'#{dbuser}', :password=>'#{password}')")
return eval("Custom_#{identifier}.connection")
end
Это дает дополнительное преимущество, заключающееся в том, что вы не меняете соединение ActiveRecord :: Base, от которого наследуются ваши модели, так что вы можете запускать SQL для этого соединения и отбрасывать объект, когда закончите.