入力データがエスケープ済みだと完全に信用できるのなら、エスケープはしたらイカン
二重になってしまうだけだし、その場合は単純に結合でいいんでないの

あと、URL の構成要素についての知識がないようだ
query を & で終了させたらその後にクエリ文字列が続くのかフラグメント文字列が始まるのか
区別つかなくなるからやっちゃ駄目

それと、+= は Ruby ではあんま使用されないので、使わないことをお勧めする