Not logged in (Log in or Sign up)

classy_forms

A form builder for Rails with labels, class attributes for input tags and disabled input tags.

WHY?

Look at all the cruft in the following...

<%- form_for @user do |f| -%>
  <%= f.error_messages %>
  <div class="input text">
    <%= label :display_name %>
    <%= f.text_field :display_name %>
  </div>
  <div class="input text">
    <%= label :email, 'Email <span class="required">* required</span>' %>
    <%= f.text_field :email %>
  </div>
  <div class="input text disabled">
    <%= label :domain %>
    <%= f.text_field :domain, :disabled => true %>
  </div>
  <div class="input submit">
    <%= f.submit "Update" %>
  </div>
<%- end -%>

Even when using HAML, there's all those extra .input div tags...

- form_for @user do |f|
  = f.error_messages
  .input.text
    = label :display_name
    = f.text_field :display_name
  .input.text
    = label :email, 'Email <span class="required">* required</span>'
    = f.text_field :email
  .input.text.disabled
    = label :domain
    = f.text_field :domain, :disabled => true
  .input.submit
    = f.submit "Update"

Installation

Install the plugin in your rails project from the command-line...

$ cd /path/to/your/project
$ script/plugin install git://github.com/sbfaulkner/classy_forms.git

Add 'config/initializers/classy_forms.rb' to your project with the following line...

ActionView::Base.default_form_builder = ClassyFormBuilder

Example

From the example shown above, you can instead...

<%- form_for @user do |f| -%>
  <%= f.error_messages %>
  <%= f.text_field :display_name %>
  <%= f.text_field :email, :required => true %>
  <%= f.text_field :domain, :disabled => true %>
  <%= f.submit "Update" %>
<%- end -%>

Using HAML it's a bit nicer yet (but most of the benefit has already been realized)...

- form_for @user do |f|
  = f.error_messages
  = form.text_field :display_name
  = form.text_field :email, :required => true
  = f.text_field :domain, :disabled => true
  = f.submit "Update"

TODO

  • label radio buttons and checkboxes with their value rather than their field name
  • group radio buttons in a single wrapper

Legal

Author: S. Brent Faulkner brentf@unwwwired.net
License: Copyright © 2008-2009 unwwwired.net, released under the MIT license

Source code

github repository