で、結局どうすればいいの?

ディレクトリトラバーサル攻撃とかを気にする必要があるなら、信頼できない文字列は全部細かくチェックするしかないんじゃないですかね。'/' 以外にも '..' が渡される場合とかもチェックする必要がありそうだし。
私は別にこの辺詳しいわけではないので、実際は何かいい方法があるのかもしれませんが。
うっかりミスを防ぐ程度なら、相対パスが欲しい場合は File.join の第一引数に '.' を付けるようにするとか?

File.join('.','','a','b') # => "./a/b"