Carlos Brando

Nome do Jogo

Edge Rails: Use rótulos nas suas páginas

631345826_d7158ef086.jpg

Faça o Teste, crie um projeto Rails 2.0 (você já sabe fazer isto né?) e execute o comando abaixo:

./script/generate scaffold Post title:string body:text

Vamos pegar como exemplo o arquivo edit.html.erb, veja como foi criado o formulário de edição:

<% form_for(@post) do |f| %>
  <p>
    <b>Title</b><br />
    <%= f.text_field :title %>
  </p>

  <p>
    <b>Body</b><br />
    <%= f.text_area :body %>
  </p>

  <p>
    <%= f.submit "Update" %>
  </p>
<% end %>

Ok, agora vamos criar um segundo projeto e usar a versão edge do Rails. Lembra como faz? Não? Então assista ao terceiro episódio do screencast deste blog.

[PAUSA PARA ASSISTIR AO EPISÓDIO]

Pronto? Beleza! Agora execute o mesmo comando acima (o primeiro código do post). Vamos pegar o mesmo arquivo e verificar como foi gerado o formulário de edição:

<% form_for(@post) do |f| %>
  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
  <p>
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </p>
  <p>
    <%= f.submit "Update" %>
  </p>
<% end %>

Hmm… diferente! E agora faz muito mais sentido. Já que temos o método label, porque não usar?

Apenas para ficar registrado, o que faz o método label?

Essa é fácil, o método label retorna uma string com o título da coluna num formato legal para se colocar na página, por exemplo, se a coluna se chama “title”, ele retorna uma string com o texto “Title”, com o “t” em maiúsculo. Essa foi fácil, manda outra…

Espera aí. Não é isso não. A resposta está ERRADA.

Na verdade o método label faz mais ou menos isso, mas ele não retorna uma string apenas com o nome da coluna, veja um exemplo:

>> f.label :title
=> <label for="post_title">Title</label>

>> f.label :title, "A short title"
=> <label for="post_title">A short title</label>

>> label :title, "A short title", :class => "title_label"
=> <label for="post_title" class="title_label">A short title</label>

Ele retorna o nome do coluna, mas dentro de uma tag <label>.

Que droga! Isto só vai sujar meu HTML

Como é? Sujar seu HTML? Calma aí, vai me dizer que você não sabe para que serve a tag <label>? Aí aí, lá vamos nós outra vez…

Percebeu o parâmetro ”for” dentro da tag? O “post_title” é o nome da caixa de texto que contém o título do nosso post. Em outras palavras a tag <label> é na verdade um rótulo associado ao objeto post_title. Quando se clica no rótulo (ele não é um link, não confunda as coisas) o controle associado a ele recebe o foco.

Legal… e para que eu vou querer isso?

Robby Russell escreveu um artigo interessante em seu blog sobre este assunto. Clique aqui para ler (está em inglês).

Se você sabe o mínimo necessário de inglês para trabalhar na área de programação, leia o artigo de Robby, é bem simples, mesmo que você saiba bem pouco de inglês. Mas se você não sabe nada (deveria se preocupar com isso) use rótulos nem que seja apenas para deixar os usuários do seu sistema mais felizes.

Comments