Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 23bdbb2e0a
Fetching contributors…


Cannot retrieve contributors at this time

file 88 lines (67 sloc) 2.109 kb

Uber builder

The greatest form builder for Ruby on Rails.

Why is it great?

  • Tabular forms
  • ul / li css forms
  • Easily extensible
  • Comes with a few useful extensions already
  • Comes with a FormBuilder compliant StaticBuilder to render any form built with it as static.

How do I harness this greatness?

To create a basic form:

<% form_for @user do |f| %>
  <h2>User details</h2>
  <% f.table do %>
    <% f.manual :label => "Name" do %>
      <%= f.text_field :first_name %>
      <%= f.text_field :last_name %>
    <% end %>
    <%= f.text_field :age %>
  <% end %>

Billing information

<% f.table do %> <%= f.text_field :address %> … etc. <% end %>

<% end %>

This form, out of the box, will be rendered as a table (with a class of form). To make the labels line up, you’ll want to add some CSS:

table.form td.label {

You can also render ul / li like so:

<% form_for @user do |f| %>
  <h2>User details</h2>
  <% f.ul do %>
  <% end %>
<% end %>

The ul is rendered with a class of “form”. You’ll need to add css styling to make it work. Good luck with that.

Buy one get one free

If you extract that to a partial, _form.html.erb, then you could use if as a static view or a form

# render it as a form
<% form_for @user do |f| %>
  <%= render :partial => "form", :locals => {:f => f} %>
<% end %>

# render it as static
<% form_for @user, :builder => StaticBuilder do |f| %>
  <%= render :partial => "form", :locals => {:f => f} %>
<% end %>

I want to submit a patch

  1. Fork Uber-Builder
  2. Make your modification
  3. Add tests!
  4. Make sure all existing tests pass
  5. Send me a pull request on github


Tim Harper


Graeme Mathieson for writing the original TabularFormBuilder, which I used as a starting point for UberBuilder

Something went wrong with that request. Please try again.