Marcio Trindade

Minha experiência com o formtastic

Ontem eu alterei um projeto meu que estava usando o form_for do rails para usar o semantic_form_for do formtastic. Vou contar aqui como foi a minha experiência para que possa incentivar e ajudar outras pessoas também.

Formtastic em ação

Se você quiser tem tudo sobre esta gem no do github (inglês) que você pode encontrar aqui

Por isso resolvi mostrar inicialmente como instalar e depois como eu utilizei em meu projeto.

Existem duas maneiras para instalar, como GEM ou como plugin. Eu pessoalmente prefiro usar GEM, mas como eu disse é pessoal se você prefere usar pluguin aqui tem o exemplo também.

Instalando como GEM

console
sudo gem install justinfrench-formtastic

Não esqueça de adicionar a dependência desta gem no environment.rb

config/environment.rb
config.gem "justinfrench-formtastic", :lib => 'formtastic', :source  => 'http://gems.github.com'

Instalando como Plugin

console
script/plugin install git://github.com/justinfrench/formtastic.git

Usando em meus projetos.

O método semantic_form_for funciona da mesma forma que o form_for do rails, sendo assim eu mantive o mesmos padrões e parâmetros na view. Como vocês podem ver eu procurei usar um pouco a metodologia DRY e fiz apenas uma view para edição que que recebe os objetos do resource_controller, com isso a mesma view de edição funciona para todos os meus objetos dentro da área administrativa.

example.html.erb
<% semantic_form_for(@object, :url => object_url, :live_validations => true, :html => { :method => :put, :multipart => true }) do |f| %>
  <%= render :partial => "form", :locals => { :f => f } %>
  <p class="submit"><%=submit_tag t(:update)%></p>
<% end %>

Eu mantive o padrão dos geradores do rails que utilizam um partial a fim de manter o mesmo form tanto para criar como para editar um registro. Então bastou eu atualizar o meu partial para usar os novos helpers. Porém uma coisa importante de se dizer aqui é que se você quiser pode usar os helpers padrão do rails sem problemas.

example.html.erb
<% f.inputs  do %>
  <%= f.input :name %>
  <%= f.hidden_field :parent_id, :value => params[:parent_id] %>
  <li>
    <%= f.label :body %>
    <%= fckeditor_textarea "page", "body", :height => "400px" %>
  </li>
<% end -%>

Este é o partial que utilizo nos formulários do modelo de páginas. Eu utilizei um helper do formtastic, um do rails e um personalizado do fckeditor. Veja mais um exemplo agora para o modelo de usuários.

example.html.erb
<% f.inputs do %>
  <%= f.input :login %>
  <%= f.input :name %>
  <%= f.input :email %>
  <%= f.input :password %>
  <%= f.input :password_confirmation %>
  <%= f.input :roles, :as => :check_boxes %>
<% end -%>

Neste caso ficou muito mais simples principalmente pra gerar os check box de roles que é um relacionamento has_and_belongs_to_many com o user. Simples não é mesmo? Então espero que goste e utilize para economizar algumas boas linhas de código.