After a lacklustre midweek loss at home to his former club Lincoln City, which had followed a heavy 4-1 defeat at Southampton, Robins boss Michael Skubala made seven changes to his starting XI, including bringing Ballard back into the mix for his third league start.
Captain Knight should have put the hosts ahead inside three minutes but, unmarked a few yards out, could only direct his header the wrong side of the post.
Watford had a good early chance of their own but Luca Kjerrumgaard - back in to start for the Hornets in one of four changes by Alessio Dionisi - poked the ball over the bar from the centre of the box.
It was the hosts who enjoyed the better pressure in the opening 45 minutes as Williams also missed a clear-cut chance and placed his diving header wide from close range.
City had their goal, though, on 31 minutes as Ballard jumped unchallenged to divert the ball in from a stylish cross by Rio Cardines, taking the on-loan Crystal Palace defender's tally for assists to an impressive six in seven league games.
Watford created more after the break but were unable to draw level.
Amin Nabizada ran down the wing and cut inside but his shot was deflected behind while Hector Kyprianou shot straight into Sam Tickle's hands and Rocco Vata lashed an effort into the stands.
City substitute Tolaj looked most like adding the second goal of the night, bursting through Watford's defence more than once but he hit the side netting and then fired over the bar despite beating Ravaglia.