<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jésus lopes &#187; formtastic</title>
	<atom:link href="http://jlopes.zigotto.com.br/tag/formtastic/feed" rel="self" type="application/rss+xml" />
	<link>http://jlopes.zigotto.com.br</link>
	<description>@zigotto &#124; ruby &#124; rails &#124; desenvolvimento &#124; software</description>
	<lastBuildDate>Sat, 01 May 2010 19:46:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Utilizando Formtastic e Inputs</title>
		<link>http://jlopes.zigotto.com.br/rails/utilizando-formtastic-e-inputs</link>
		<comments>http://jlopes.zigotto.com.br/rails/utilizando-formtastic-e-inputs#comments</comments>
		<pubDate>Fri, 04 Dec 2009 23:35:31 +0000</pubDate>
		<dc:creator>Jésus Lopes</dc:creator>
				<category><![CDATA[plugins]]></category>
		<category><![CDATA[projetos]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[formtastic]]></category>
		<category><![CDATA[inputs]]></category>
		<category><![CDATA[mask]]></category>
		<category><![CDATA[meiomask]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[zigotto]]></category>

		<guid isPermaLink="false">http://jlopes.zigotto.com.br/?p=172</guid>
		<description><![CDATA[Alguns meses atrás escrevi um plugin chamado Inputs. Como pode ser lido neste post, o objetivo é facilitar a criação de máscaras em campos de formulário.
Após ter descoberto o Formtastic, passei a utilizar o mesmo em todos os projetos aqui na Zigotto. Gosto muito da maneira que ele me permite trabalhar e escrever o código [...]]]></description>
			<content:encoded><![CDATA[<p>Alguns meses atrás escrevi um plugin chamado <a href="http://github.com/jtadeulopes/inputs">Inputs</a>. Como pode ser lido <a href="http://jlopes.zigotto.com.br/rails/plugin-inputs-crie-mascaras-para-campos-de-formularios">neste post</a>, o objetivo é facilitar a criação de máscaras em campos de formulário.</p>
<p>Após ter descoberto o <a href="http://jlopes.zigotto.com.br/rails/formularios-com-formtastic">Formtastic</a>, passei a utilizar o mesmo em todos os projetos aqui na <a href="http://www.zigotto.com.br">Zigotto</a>. Gosto muito da maneira que ele me permite trabalhar e escrever o código mais limpo e organizado.</p>
<p>E com tudo isso, comecei a me perguntar:</p>
<ul>
<li>O Inputs pode ser utlizado junto com o Formtastic?</li>
<li>Como unir os dois de uma maneira bem simples e continuar usando o Formtastic para trabalhar com os formulários?</li>
</ul>
<p>Imaginei algo como:</p>
<pre class="rails"><code>&lt;% semantic_form_for <span class="re1">@product</span> <span class="kw1">do</span> |form| %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:price</span>, <span class="re3">:mask</span> =&gt; <span class="re3">:decimal</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>Gostei! É exatamente isso que eu quero! <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Inputs foi <a href="http://github.com/jtadeulopes/inputs/commits/master/">atualizado</a> e agora é possível através da opção <strong>:mask</strong> informar qual o tipo de máscara que você quer inserir no campo do formulário!</p>
<h4>Como usar?</h4>
<ol>
<li>Instale e configure o Formtastic em seu projeto. Veja como fazer isso <a href="http://jlopes.zigotto.com.br/rails/formularios-com-formtastic">aqui</a>.</li>
<li>Instale e configure o plugin Inputs. Veja como fazer isso <a href="http://jlopes.zigotto.com.br/rails/plugin-inputs-crie-mascaras-para-campos-de-formularios">aqui</a>.</li>
</ol>
<p>Após tudo configurado, é possível se fazer isso: </p>
<pre class="rails"><code>&lt;% semantic_form_for <span class="re1">@customer</span> <span class="kw1">do</span> |form| %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:name</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:phone</span>, <span class="re3">:mask</span> =&gt; <span class="re3">:phone</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:cpf</span>, <span class="re3">:mask</span> =&gt; <span class="re3">:cpf</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>Você pode utlizar outras máscaras já definidas:</p>
<ul>
<li>phone</li>
<li>phone-us</li>
<li>cpf</li>
<li>cnpj</li>
<li>date</li>
<li>date-us</li>
<li>cep</li>
<li>time</li>
<li>cc</li>
<li>integer</li>
<li>decimal</li>
<li>decimal-us</li>
<li>signed-decimal-us</li>
</ul>
<p>ou criar a sua própria máscara:</p>
<pre class="rails"><code>&lt;% semantic_form_for <span class="re1">@product</span> <span class="kw1">do</span> |form| %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:year</span>, <span class="re3">:mask</span> =&gt; <span class="st0">'9999'</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:phone</span>, <span class="re3">:mask</span> =&gt; <span class="st0">'99-9999-9999'</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>Inputs utiliza o plugin <a href="http://www.meiocodigo.com/projects/meiomask/">meioMask</a> para criar as máscaras, demais opções e configurações podem ser vista na própria página do <a href="http://www.meiocodigo.com/projects/meiomask/">meioMask</a>.</p>
<p>Sugestões, criticas são bem vindas. O código esta no <a href="http://github.com/jtadeulopes/inputs">Github</a>, fiquem a vontade para utilizar, modificar e compartilhar <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jlopes.zigotto.com.br/rails/utilizando-formtastic-e-inputs/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Formulários com Formtastic</title>
		<link>http://jlopes.zigotto.com.br/rails/formularios-com-formtastic</link>
		<comments>http://jlopes.zigotto.com.br/rails/formularios-com-formtastic#comments</comments>
		<pubDate>Mon, 07 Sep 2009 03:15:58 +0000</pubDate>
		<dc:creator>Jésus Lopes</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[formtastic]]></category>
		<category><![CDATA[gem]]></category>

		<guid isPermaLink="false">http://jlopes.zigotto.com.br/?p=124</guid>
		<description><![CDATA[
      Procurando uma alternativa para trabalhar com formulários no Rails, encontrei a gem Formtastic.
    

      O projeto é mantido por Justin French e José Valim, além de outras pessoas que ajudaram no projeto. Todo o código fonte esta no Github.
   [...]]]></description>
			<content:encoded><![CDATA[<p>
      Procurando uma alternativa para trabalhar com formulários no Rails, encontrei a gem <a href="http://github.com/justinfrench/formtastic/tree/master">Formtastic</a>.
    </p>
<p>
      O projeto é mantido por <a href="http://justinfrench.com/">Justin French</a> e <a href="http://github.com/josevalim">José Valim</a>, além de outras pessoas que ajudaram no projeto. Todo o código fonte esta no <a href="http://github.com/justinfrench/formtastic/tree/master">Github</a>.
    </p>
<p>
      Sem mais, vamos trabalhar =)
    </p>
<h4>Preparando o ambiente</h4>
<p>
      Para gerar os scaffolds e um layout básico vou usar a gem <a href="http://github.com/ryanb/nifty-generators/tree/master">Nifty Generators</a> do <a href="http://railscasts.com/">Ryan Bates</a>.
    </p>
<p>
      Instalando a gem nifty-generators:
    </p>
<pre>sudo gem install nifty-generators</code></pre>
<p>
      Criado a aplicação:
    </p>
<p>
      Pensando em acelerar um pouco o processo, criei um <a href="http://gist.github.com/181560.txt">template básico</a> e vamos criar a aplicação usando ele!
    </p>
<pre class="bash"><code>rails formtastic -m http://gist.github.com/<span class="nu0">181560</span>.txt
<span class="kw3">cd</span> formtastic</code></pre>
<p>
      Instalando a gem formtastic:
    </p>
<pre><code>sudo gem install justinfrench-formtastic</code></pre>
<p>
      Adicione no environment.rb:
    </p>
<pre class="rails"><code><span class="co1"># config/environment.rb</span>
config.<span class="me1">gem</span> <span class="st0">&quot;justinfrench-formtastic&quot;</span>, <span class="re3">:version</span> =&gt; <span class="st0">&quot;0.2.2&quot;</span>, <span class="re3">:lib</span> =&gt; <span class="st0">'formtastic'</span>, <span class="re3">:source</span>  =&gt; <span class="st0">'http://gems.github.com'</span></code></pre>
<p>
      Gerando um layout basicão:
    </p>
<pre><code>script/generate nifty_layout</code></pre>
<p>
      Pronto <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
    </p>
<h4>Usando</h4>
<p>
      Como minha criatividade não permite algo diferente, vamos trabalhar com Produtos e Categorias.
    </p>
<p>
      Gerando o scaffold para Categorias:
    </p>
<pre><code>script/generate nifty_scaffold Category name:string status:boolean ! show</code></pre>
<p>
      Rode as migrações:
    </p>
<pre><code>rake db:migrate</code></pre>
<p>
      Se olharmos o código do formulário criado, teremos algo como:
    </p>
<pre class="rails"><code><span class="co1"># app/views/categories/_form.html.erb</span>
&nbsp;
&lt;% <span class="kw5">form_for</span> <span class="re1">@category</span> <span class="kw1">do</span> |f| %&gt;
  &lt;%= f.<span class="me1">error_messages</span> %&gt;
  &lt;p&gt;
    &lt;%= f.<span class="me1">label</span> <span class="re3">:name</span> %&gt;&lt;br /&gt;
    &lt;%= f.<span class="kw5">text_field</span> <span class="re3">:name</span> %&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;%= f.<span class="me1">label</span> <span class="re3">:status</span> %&gt;&lt;br /&gt;
    &lt;%= f.<span class="kw5">check_box</span> <span class="re3">:status</span> %&gt;
  &lt;/p&gt;
  &lt;p&gt;&lt;%= f.<span class="me1">submit</span> <span class="st0">&quot;Submit&quot;</span> %&gt;&lt;/p&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>
Visualizando o formulário:
</p>
<p>    <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela02.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela02-300x89.png" alt="tela02" title="tela02" width="300" height="89" class="alignnone size-medium wp-image-129" /></a></p>
<p>
      Ok Jésus! Você falou, falou, mas cade o Formtastic?
    </p>
<p>
      Até agora não fizemos nada com ele. Experimente trocar o código gerado pelo scaffold pelo código abaixo:
    </p>
<pre class="rails"><code><span class="co1"># app/views/categories/_form.html.erb</span>
&nbsp;
&lt;% semantic_form_for <span class="re1">@category</span> <span class="kw1">do</span> |form| %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">inputs</span> %&gt;
  &lt;%= <span class="kw5">form</span>.<span class="me1">buttons</span> %&gt;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>
      Somente isso? Vamos ver o formulário:
    </p>
<p>    <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela03.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela03-300x97.png" alt="tela03" title="tela03" width="300" height="97" class="alignnone size-medium wp-image-131" /></a></p>
<p>
      Mas tudo esta muito estranho. Quero modificar e adicionar algumas informações como: <br/></p>
<ul>
<li>
      Separar em fieldsets diferentes os campos e botões
      </li>
<li>
      Colocar uma mensagem informativa abaixo do campo Name
      </li>
<li>
      Alterar o campo Status de checkbox para radio button.
      </li>
</ul>
<pre class="rails"><code><span class="co1"># app/views/categories/_form.html.erb</span>
&nbsp;
&lt;% semantic_form_for <span class="re1">@category</span> <span class="kw1">do</span> |form| %&gt;
&nbsp;
  &lt;% <span class="kw5">form</span>.<span class="me1">inputs</span> <span class="kw1">do</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:name</span>, <span class="re3">:hint</span> =&gt; <span class="st0">&quot;Example: food, books, electronics.&quot;</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:status</span>, <span class="re3">:as</span> =&gt; <span class="re3">:radio</span> %&gt;
  &lt;% <span class="kw1">end</span> %&gt;
&nbsp;
  &lt;% <span class="kw5">form</span>.<span class="me1">inputs</span> <span class="kw1">do</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
  &lt;% <span class="kw1">end</span> %&gt;
&nbsp;
&lt;% <span class="kw1">end</span> %&gt;</code></pre>
<p>
      Podemos ter o controle de tudo! Veja como ficou:
    </p>
<p>    <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela04.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela04-300x128.png" alt="tela04" title="tela04" width="300" height="128" class="alignnone size-medium wp-image-132" /></a></p>
<p>
      Vamos para o cadastro de Produtos, gerando o scaffold para o mesmo:
    </p>
<pre><code>script/generate nifty_scaffold Product category_id:integer name:string description:text price:decimal status:boolean</code></pre>
<pre><code>rake db:migrate</code></pre>
<p>
      Criando o relacionamento entre Produtos e Categorias:
    </p>
<pre class="rails"><code><span class="co1"># app/models/category.rb</span>
<span class="kw1">class</span> Category &lt; <span class="re2">ActiveRecord::Base</span>
&nbsp;
  <span class="kw5">has_many</span> <span class="re3">:products</span>
&nbsp;
  <span class="kw5">validates_presence_of</span> <span class="re3">:name</span>
  validates_inclusion_of <span class="re3">:status</span>, <span class="re3">:in</span> =&gt; <span class="br0">&#91;</span><span class="kw2">true</span>, <span class="kw2">false</span><span class="br0">&#93;</span>
&nbsp;
<span class="kw1">end</span>
&nbsp;
<span class="co1"># app/models/product.rb</span>
<span class="kw1">class</span> Product &lt; <span class="re2">ActiveRecord::Base</span>
&nbsp;
  <span class="kw5">belongs_to</span> <span class="re3">:category</span>
&nbsp;
  <span class="kw5">validates_presence_of</span> <span class="re3">:category</span>, <span class="re3">:name</span>, <span class="re3">:price</span>
  validates_inclusion_of <span class="re3">:status</span>, <span class="re3">:in</span> =&gt; <span class="br0">&#91;</span><span class="kw2">true</span>, <span class="kw2">false</span><span class="br0">&#93;</span>
&nbsp;
<span class="kw1">end</span></code></pre>
<p>
      Nosso formulário está assim:
    </p>
<p>    <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela05.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela05-300x146.png" alt="tela05" title="tela05" width="300" height="146" class="alignnone size-medium wp-image-133" /></a></p>
<p>
      Não esta legal, vamos melhorar para: <br/></p>
<ul>
<li>
          Adicionar um select para escolher uma categoria.
        </li>
<li>
          Deixar o (*) somente nos campos obrigatórios.
        </li>
<li>
          Diminuir o tamanho do campo Price.
        </li>
<li>
          Alterar o campo Status de checkbox para select.
        </li>
</ul>
<pre class="rails"><code><span class="co1"># app/views/products/_form.html.erb</span>
&nbsp;
&lt;% semantic_form_for <span class="re1">@product</span> <span class="kw1">do</span> |form| %&gt;
&nbsp;
  &lt;% <span class="kw5">form</span>.<span class="me1">inputs</span> <span class="kw1">do</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:category</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:name</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:description</span>, <span class="re3">:required</span> =&gt; <span class="kw2">false</span>, <span class="re3">:input_html</span> =&gt; <span class="br0">&#123;</span>:rows =&gt; <span class="nu0">3</span><span class="br0">&#125;</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:price</span>, <span class="re3">:input_html</span> =&gt; <span class="br0">&#123;</span>:<span class="kw5">size</span> =&gt; <span class="nu0">10</span><span class="br0">&#125;</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="kw5">input</span> <span class="re3">:status</span>, <span class="re3">:as</span> =&gt; <span class="re3">:select</span> %&gt;
  &lt;% <span class="kw1">end</span> -%&gt;
&nbsp;
  &lt;% <span class="kw5">form</span>.<span class="me1">inputs</span> <span class="kw1">do</span> %&gt;
    &lt;%= <span class="kw5">form</span>.<span class="me1">commit_button</span> %&gt;
  &lt;% <span class="kw1">end</span> -%&gt;
&nbsp;
&lt;% <span class="kw1">end</span> -%&gt;</code></pre>
<p>
  Olha ai como ele ficou:
  </p>
<p>  <a href="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela06.png"><img src="http://jlopes.zigotto.com.br/wp-content/uploads/2009/09/tela06-300x134.png" alt="tela06" title="tela06" width="300" height="134" class="alignnone size-medium wp-image-134" /></a></p>
<p><h4>Input Types</h4>
</p>
<p>
      Formtastic mapeia diretamente a maioria dos inputs, mas se por algum motivo você precisar alterar o seu tipo (por exemplo, como fizemos com o Status) você pode usar:
    </p>
<ul>
<li>
      :select (select para associações)
      </li>
<li>
      :check_boxes (conjunto de check_box) &#8211; uma alternativa ao :select para associações has_many e has_and_belongs_to_many
      </li>
<li>
      :radio (conjunto de radio) &#8211; alternativa ao :select para associações belongs_to
      </li>
<li>
      :time_zone (select com fusos horários)
      </li>
<li>
      :password (campo tipo password) &#8211; padrão para colunas do tipo :string com &#8216;password&#8217; no nome do método
      </li>
<li>
      :text (textarea) &#8211; padrão para colunas do tipo :text
      </li>
<li>
      :date (select para datas) &#8211; padrão para colunas do tipo :date
      </li>
<li>
      :datetime (select para data e hora) &#8211; padrão para colunas do tipo :datetime e :timestamp
      </li>
<li>
      :time (select para hora) &#8211; padrão para colunas do tipo :time
      </li>
<li>
      :boolean (checkbox) &#8211; padrão para colunas do tipo :boolean (você também pode usar :select e :radio)
      </li>
<li>
      :string (campo de texto) &#8211; padrão para colunas do tipo :string
      </li>
<li>
      :numeric (campo de texto, como string) &#8211; padrão para colunas do tipo :integer, :float e :decimal
      </li>
<li>
      :country (menu select com nomes de países) &#8211; requer plugin <a href="http://github.com/rails/iso-3166-country-select/tree/master">country_select</a> instalado
      </li>
<li>
      :hidden (campo oculto) &#8211; cria um campo oculto
      </li>
</ul>
<h4>Stylesheets</h4>
<p>
      Mas Jésus, e esse visual feio ai? Tem como melhorar não??
    </p>
<p>
      Claro que tem! Tente isso:
    </p>
<pre><code>script/generate formtastic_stylesheets</code></pre>
<p>
      Ele vai copiar dois arquivos (formtastic.css e formtastic_changes.css) dentro da pasta public/stylesheets para que você possa personalizar todo o visual do formulário <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
    </p>
<p>
      Basta adicionar ambos na view e trabalhar em suas propriedades:
    </p>
<pre class="rails"><code>&lt;%= <span class="kw5">stylesheet_link_tag</span> <span class="st0">&quot;formtastic&quot;</span> %&gt;
&lt;%= <span class="kw5">stylesheet_link_tag</span> <span class="st0">&quot;formtastic_changes&quot;</span> %&gt;</code></pre>
<p>
      Claro que muito mais pode ser feito, como suporte a I18n, upload de imagens, mas isso ficará para um outro post =/
    </p>
<p>
      Vale a pena dar uma olhada em sua <a href="http://rdoc.info/projects/justinfrench/formtastic">ótima documentação</a> e nos seus arquivos no <a href="http://github.com/justinfrench/formtastic/tree/master">Github</a>.
    </p>
<p>
      A idéia aqui, foi dar uma introdução e mostrar como ele pode facilitar e ajudar na hora de trabalhar com formulário no Rails.
    </p>
<p>
      É isso ai, vou finalizando por aqui <img src='http://jlopes.zigotto.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
    </p>
]]></content:encoded>
			<wfw:commentRss>http://jlopes.zigotto.com.br/rails/formularios-com-formtastic/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
