Live Validations
Em meus últimos projetos utilizei o plugin live-validations que me facilitou trabalhar com as validações no lado do cliente. A lógica do plugin é passar a validação de seus models para js evitando assim posts desnecessários. Este funciona com jQuery ou Prototype No meu caso utilizei a jQuery e vou mostrar abaixo como é simples fazer isso.

Pra começar vamos fazer o download do validate e colocar o arquivo jquery.validate.min no diretório public/javascripts e então basta instanciar a jQuery e o plugin.
<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" %> <%= javascript_include_tag "jquery.validate.min" %>
Agora vamos instalar o live-validations pra facilitar a nossa vida e fazer a validação automática.
script/plugin install git://github.com/augustl/live-validations.gitEntão adicione a linha abaixo no seu environment.rb ou dentro de um intializer (que eu prefiro)
LiveValidations.use :jquery_validations
Agora basta adicionar o código :live_validations => true nos formulários que pretende usar validação.
<% form_for(@user, :live_validations => true) %>O live-validations vai aplicar as mesmas regras que você colocar no seu model para o formulário através do plugin validate, incluindo validações como validates_uniquess_of onde é feito uma requisição ajax pra validar se o campo é valido ou não.
Acredito que desta forma fica mais fácil aplicar as validações e diminui o risco de você adicionar as validações para um (model ou javascript) e esquecer de aplicar a mesma validação para o outro.