Sanitize, безусловно, лучше, чем помощник "h". Вместо того, чтобы экранировать все, он фактически разрешает html-теги, которые вы укажете. И да, он предотвращает межсайтовый скриптинг, потому что полностью удаляет JavaScript из смеси.
Короче говоря, оба сделают свою работу. Используйте «h», если вы не ожидаете ничего, кроме открытого текста, и используйте sanitize, когда вы хотите разрешить некоторые из них, или вы полагаете, что люди могут попытаться ввести его. Даже если вы запретите все теги с помощью команды sanitize, он будет «убирать» код, удаляя их вместо экранирования, как это делает «h».
Что касается неполных тегов: вы можете запустить проверку модели, которая пропускает html-содержащие поля через hpricot, но я думаю, что это излишне в большинстве приложений.