Willian Fernandes

Como gerar validações client-side em projetos Rails usando jQuery Validator com ClientValidations

Comente »

Estou fazendo uma nova aplicação aqui na empresa e teremos muitos formulários. Para não precisar criar um script de validação para cada formulário, fui atrás de um plugin que gerasse as validação JavaScript automáticamente, com base nas validações do modelo.

Sem maiores problemas, encontrei o plugin Live Validations. Ele faz tudo o que preciso, quer dizer, quase tudo. :(

Alguns dos formulários dessa aplicação são Nested Model Form e o Live Validations não suporta esse tipo de formulário.

Sendo assim, resolvi fazer meu próprio plugin, chamado Client Validations. O que ele faz é basicamente ler as validações definidas no Model e traduzi-las para JavaScript usando jQuery Validator.

Instalação

script/plugin install git://github.com/willian/client_validations.git

Como o Client Validations depende do plugin Validation Reflection, preciaremos instalar ele também:

script/plugin install git://github.com/redinger/validation_reflection.git

E por último basta instalar o jQuery e o jQuery Validator:

Não esqueça de carregar o jquery e o validator no seu HTML:

<%= javascript_include_tag 'jquery-latest.min.js', 'jquery.validate.min.js' %>

Supondo que temos o modelo abaixo:

class Task < ActiveRecord::Base
  validates_presence_of :name
end
 

E o formulário desse modelo:

<% form_for(@task) do |f| %>
  <%= f.error_messages %>
 
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

Tudo o que precisamos fazer para a validação client-side funcionar é adicionar o helper client_validations no formulário. Ficará assim:

<% form_for(@task) do |f| %>
  <%= f.error_messages %>
 
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
  <%= f.client_validations %>
<% end %>

Provavelmente você receberá a seguinte mensagem de validação:

translation missing: en, activerecord, attributes, task, name can't be blank

Para resolver esse problema, basta criar o arquivo de internacionalização em config/locales.

O plugin ainda está na versão 0.1.0 e muita coisa pode ser feita para melhorá-lo. Se tiver alguma sugestão, crie um comentário ou use a página do GitHub: http://github.com/willian/client_validations

Ambiente de desenvolvimento Ruby on Rails no Mac OS Snow Leopard

Comente »

Recentemente atualizei meu Mac para o Snow Leopard[bb] e fui logo configurar meu ambiente de desenvolvimento[bb].

Como alguns já sabem, programo em Python[bb], mas atualmente estou afastado da linguagem, utilizando 100% Rails[bb].

Uma das coisas que aproveitei quando resolvi instalar o Snow Leopard[bb] foi formatar todo o HD. Com o tempo fui acumulando alguns lixos, então juntei o útil com o agradável e fiz uma bela faxina.

Outra coisa: meu Vim estava todo bagunçado. Fiz uma cagada nele e estava difícil trabalhar com ele, então estava usando somente o TextMate[bb]. Adoro o TextMate, é um baita editor, mas não é meu Vim[bb]. Com o Vim me sinto mais em casa e não sofro quando preciso programar em uma máquina que não seja meu Mac[bb], afinal, o Vim é free e roda até no Windows[bb] (eca!).

Bom, vamos lá!

O Vim

Para facilitar sua vida, criei um repositório do meu Vim, todo configurado, pronto para uso.

Para instalá-lo, basta fazer o clone:

$ git clone git://github.com/willian/willvim.git

Entre no diretório criado pelo comando acima e execute o comando abaixo:

$ chmod +x install.sh
$ ./install.sh

Os comandos acima baixam os repositórios dos plugins e faz a instalação dos arquivos no seu diretório $HOME/.vim.

ATENÇÃO: Esses comandos não funcionarão no Windows[bb]. Em breve configurarei isso.

MacVim

Gosto de usar o MacVim[bb] (ou o gVim quando estou no Linux), pois tem uma aparência melhor do que o Vim no terminal.

Entre na página de download do MacVim e baixe a versão mais nova. A versão "stable" até a data deste post é a MacVim-7_2-stable-1_2.tbz.

Se você está no Linux[bb] e usa Ubuntu[bb], basta rodar o comando abaixo:

$ sudo apt-get install vim vim-gnome vim-full vim-python vim-rails vim-ruby

Agora basta rodar o comando mvim ou gvim (caso você esteja no Linux) no terminal para abrir o Vim no modo gráfico.

Ruby on Rails

Tanto a linguagem quando o framework já estão instalados no seu Mac, mas precisamos atualizá-los. Na verdade, você pode apenas atualizar o Rails[bb], e é exatamente isso que vou mostrar aqui.

Atualizando o RubyGems

$ sudo gem install rubygems-update

Esse comando instala a nova versão do RubyGems[bb]. Para verificar a versão instalada, rode o comando abaixo:

$ gem -v
1.3.5

Até a data deste post a versão mais nova é a 1.3.5.

Atualizando suas gems

$ sudo gem update

Atualizando o Ruby on Rails

Nesse ponto a versão do Rails já deve estar atualizada, mas caso não esteja, rode o comando abaixo:

$ sudo gem install rails

MySQL

Apesar de poder rodar o Rails com o SQLite[bb], gosto de usar o MySQL[bb] no ambiente de desenvolvimento. Para isso, acesso a página de download do MySQL e busque a versão mais nova. Na data de criação deste post a versão mais nova é a MySQL 5.1.

ATENÇÃO: Só fique atento à arquitetura escolhida. O Snow Leopard[bb] roda com 64bits[bb], então baixe a versão x86_64.

Feito isso, hora de instalar a gem do MySQL:

$ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Testando tudo

Vamos criar um aplicação de teste para verificar se o Rails está rodando corretamente, incluindo o MySQL:

$ rails blog -d mysql
$ cd blog/
$ script/generate scaffold Post title:string body:string
$ rake db:create
$ rake db:migrate

Se não aparecer nenhuma mensagem de erro, os procedimentos acima foram executados corretamente e você agora tem um ambiente completo para desenvolver seus aplicativos com Rails.